Как сопоставить один массив с другим массивом, но сохранив соответствующие элементы в javascript

#javascript

#javascript

Вопрос:

У меня есть следующие 2 массива, возвращаемые из функции, которую я хочу просмотреть в массиве A, и если одно из этих значений найдено в массиве B, я хочу сохранить координаты. На данный момент то, что я пробовал, ничего не возвращает. (Я просто пытаюсь вернуть, включает ли anotherArray один из collabs

Массив A

 anotherArray = 
[
    "Jadavpur University",
    "University of Wales, Bangor",
    "University of Wales, Bangor",
    "University of Wales, Bangor",
    "University of Aberdeen",
    "University of Glasgow"
]
  

Фильтровать массив

     filter [
    {
        "collabs": "Agri-food,18a Newforge Lane, Belfast",
        "coordinates": [
            -5.943629,
            54.559632
        ]
    },
    {
        "collabs": "Manga Cl, Nairobi, Kenya",
        "coordinates": [
            36.81667,
            -1.28333
        ]
    },
    {
        "collabs": "University of Dundee",
        "coordinates": [
            -2.97,
            56.464
        ]
    },
    {
        "collabs": "University of Leeds",
        "coordinates": [
            -1.54917,
            53.79972
        ]
    },
    {
        "collabs": "Scottish Bowel Screening Centre",
        "coordinates": [
            -86.6396113,
            33.6535795
        ]
    },
    {
        "collabs": "NHS Greater Glasgow amp; Clyde",
        "coordinates": [
            -4.066085,
            55.797777
        ]
    },
    {
        "collabs": "University of Aberdeen",
        "coordinates": [
            -2.140831,
            57.118693
        ]
    },
    {
        "collabs": "CEH Edinburgh",
        "coordinates": [
            -73.660483,
            45.456296
        ]
    },
    {
        "collabs": "Anhui University",
        "coordinates": [
            -77.8624,
            40.8005
        ]
    },
    {
        "collabs": "University of Wales, Bangor",
        "coordinates": [
            -4.13,
            53.23
        ]
    },
    {
        "collabs": "Food and Environment Research Agency (FERA)",
        "coordinates": [
            1.55528,
            42.55833
        ]
    },
    {
        "collabs": "Centre for Environment, Fisheries and Aquaculture Science (CEFAS)",
        "coordinates": [
            1.55528,
            42.55833
        ]
    },
    {
        "collabs": "University of Edinburgh",
        "coordinates": [
            -3.19889,
            55.95
        ]
    },
    {
        "collabs": "University of Manchester",
        "coordinates": [
            -2.275228,
            53.488028
        ]
    },
    {
        "collabs": "University of Aberdeen",
        "coordinates": [
            -2.140831,
            57.118693
        ]
    },
    {
        "collabs": "University of Natural Resources and Life Sciences",
        "coordinates": [
            1.55528,
            42.55833
        ]
    },
    {
        "collabs": "Jadavpur University",
        "coordinates": [
            77.2146,
            28.6882
        ]
    },
    {
        "collabs": "Noakhali Science and Technology University (NSTU)",
        "coordinates": [
            25.205,
            59.071
        ]
    },
    {
        "collabs": "Plymouth Marine Laboratory",
        "coordinates": [
            -93.4665,
            45.0065
        ]
    },
    {
        "collabs": "Huazhong Agricultural University",
        "coordinates": [
            -123.25275,
            49.266565
        ]
    }
]
  

Что я пробовал

  res = filterArray.filter(f=> anotherArray.includes(f)); 
  

Ожидаемый результат

 res = [

 matchingObject: {
     "collabs": "University of Wales, Bangor",
        "coordinates": [
            -4.13,
            53.23
        ]
}
]
  

Комментарии:

1. ожидаемый результат?

2. массив B не является допустимым Javascript или JSON.

3. Обновленный OP с допустимым JSON и ожидаемым результатом

Ответ №1:

Ваш filterArray недопустимый массив. Вы должны передавать каждый элемент как объект, подобный этому:

 filterArray = [
  {
    collabs: "Agri-food,18a Newforge Lane, Belfast",
    coordinates:  [-5.943629, 54.559632]
  },
  {
    collabs: "Manga Cl, Nairobi, Kenya"
    coordinates:  [36.81667, -1.28333]
  } // and so on
]
  

Ваш подход к фильтрации каждого элемента хорош, просто вам нужно сравнить f.collabs , поскольку f представляет каждый объект в массиве.

 res = filterArray.filter(f => anotherArray.includes(f.collabs);
  

Ответ №2:

Как упоминал Дэн, ваш JSON недействителен. Вот исправленный формат и измените свой фильтр на этот.

 res = filterArray.filter(f=> anotherArray.includes(f.collabs)); 
console.log(res)
  

https://jsfiddle.net/jfwcvLbn/1/

Ответ №3:

Используйте функцию filter для фильтрации данных и функцию map в качестве проекции

 var filterdData = filterArray.filter(function(t){ return anotherArray.indexOf(t.collabs) !== -1 }).map(function(t){return t.coordinates;});