Здесь у меня есть два массива массив1 и массив2, я хочу найти идентификаторы из массива1, имена массивов которых совпадают со значениями массива2, как найти идентификаторы в JavaScript?

Массив1:

[ {id: 1, name: "Hindi"}
  {id: 2, name: "English"}
  {id: 3, name: "French"}
  {id: 4, name: "Russian"}
  {id: 5, name: "Urdu"}
  {id: 6, name: "Japanese"}
]

Массив2:

["Hindi", "Russian", "Urdu"]

Я пробовал этот код

console.log(array1.find(x => x.name === array2).id;
1
Dharmesh 2 Май 2019 в 10:11

4 ответа

Лучший ответ

Вы можете использовать filter() чтобы получить объекты, имена которых находятся в массиве. Затем используйте map() для преобразования массива значений в массив идентификаторов.

В вашем коде вы сравниваете строку с массивом x.name === array2. Вы должны использовать includes()

let arr = [ {id: 1, name: "Hindi"}, {id: 2, name: "English"}, {id: 3, name: "French"}, {id: 4, name: "Russian"}, {id: 5, name: "Urdu"}, {id: 6, name: "Japanese"} ]
let lang = ["Hindi", "Russian", "Urdu"];

let res = arr.filter(x => lang.includes(x.name)).map(x => x.id);
console.log(res)
1
Maheer Ali 2 Май 2019 в 07:25

Вы должны использовать метод filter в сочетании с map и деструктуризацией

let arr1 = [ {id: 1, name: "Hindi"}, {id: 2, name: "English"}, {id: 3, name: "French"}, {id: 4, name: "Russian"}, {id: 5, name: "Urdu"}, {id: 6, name: "Japanese"} ], arr2 = ["Hindi", "Russian", "Urdu"];

console.log(arr1.filter(({name}) => arr2.includes(name)).map(({id}) => id));
1
Mihai Alexandru-Ionut 2 Май 2019 в 07:14

Попробуй это:

 var a = [{
      id: 1,
      name: "Hindi"
    }, {
      id: 2,
      name: "English"
    }, {
      id: 3,
      name: "French"
    }, {
      id: 4,
      name: "Russian"
    }, {
      id: 5,
      name: "Urdu"
    }, {
      id: 6,
      name: "Japanese"
    }]
    var b = ["Hindi", "Russian", "Urdu"];
    var c = a.filter(function(i){
    return b.indexOf(i.name)>-1;
    });
    console.log(c); // New Array with filtered values
0
Sudhir Ojha 2 Май 2019 в 07:18

Это тоже сработает :)

var a1 = [{
  id: 1,
  name: "Hindi"
}, {
  id: 2,
  name: "English"
}, {
  id: 3,
  name: "French"
}, {
  id: 4,
  name: "Russian"
}, {
  id: 5,
  name: "Urdu"
}, {
  id: 6,
  name: "Japanese"
}]
var a2 = ["Hindi", "Russian", "Urdu"];
var filter = a1.filter(function(i) {
  return a2.indexOf(i.name) > -1;
}).map(function(obj) {
  return obj.id;
});;
console.log(filter);
0
p u 2 Май 2019 в 07:29