#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)
Ответ №3:
Используйте функцию filter для фильтрации данных и функцию map в качестве проекции
var filterdData = filterArray.filter(function(t){ return anotherArray.indexOf(t.collabs) !== -1 }).map(function(t){return t.coordinates;});