Допустим, у меня есть переменная вроде:
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?
Я могу использовать цикл, но это дорого :(
3 ответа
Вы можете использовать findIndex
а> :
var vendors = [{ Name: 'Magenic', ID: 'ABC' }, { Name: 'Microsoft', ID: 'DEF' }];
console.log(vendors.findIndex(v => v.ID === 'ABC')) // 0
console.log(vendors.findIndex(v => v.ID === 'DEF')) // 1
Таким образом, вы можете проверить, содержится ли объект в массиве объектов.
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);
Чтобы проверить, содержит ли массив объект, вы можете использовать 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)
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.