Допустим, у меня есть переменная вроде:

var vendors = [
    {
      Name: 'Magenic',
      ID: 'ABC'
     },
    {
      Name: 'Microsoft',
      ID: 'DEF'
    }
];

var v1 = {
      Name: 'Magenic',
      ID: 'ABC'
     };

Когда я запускаю следующий код для поиска v1 в vendors с использованием indexOf , он всегда возвращает -1

console.log(vendors.indexOf(v1));

Даже если v1 существует в массиве vendors, он возвращает -1. Как правильно найти индекс объекта в массиве объектов, используя js?

Я могу использовать цикл, но это дорого :(

1
Emu 13 Дек 2016 в 20:36

3 ответа

Лучший ответ

Таким образом, вы можете проверить, содержится ли объект в массиве объектов.

var vendors = [
    {
      Name: 'Magenic',
      ID: 'ABC'
     },
    {
      Name: 'Microsoft',
      ID: 'DEF'
    }
];

var v1 = {
      Name: 'Magenic',
      ID: 'ABC'
     };

var result = vendors.findIndex(x => x.ID === v1.ID && x.Name === v1.Name)
console.log(result);
0
kevin ternet 13 Дек 2016 в 17:55

Чтобы проверить, содержит ли массив объект, вы можете использовать some(), а затем проверить, существует ли каждая пара key - value в каком-либо объекте массива с every(), и это вернет true/false в качестве результата.

var vendors = [{
  Name: 'Magenic',
  ID: 'ABC'
}, {
  Name: 'Microsoft',
  ID: 'DEF'
}];

var v1 = {
  Name: 'Magenic',
  ID: 'ABC'
};

var result = vendors.some(function(e) {
  return Object.keys(v1).every(function(k) {
    if(e.hasOwnProperty(k)) {
      return e[k] == v1[k]
    }
  })
})

console.log(result)
1
Nenad Vracar 13 Дек 2016 в 17:49