Используя метод ES6 findIndex
, без lodash или любых других библиотек, вы можете написать:
function deepIndexOf(arr, obj) {
return arr.findIndex(function (cur) {
return Object.keys(obj).every(function (key) {
return obj[key] === cur[key];
});
});
}
Это сравнит непосредственные свойства объекта, но не вернется в свойства.
Если ваша реализация пока не предоставляет findIndex
(большинство не предоставляют), вы можете добавить легкий полифилл, поддерживающий этот поиск:
function deepIndexOf(arr, obj) {
function findIndex = Array.prototype.findIndex || function (pred) {
for (let i = 0; i < this.length; ++i) {
if (pred.call(this, this[i], i)) {
return i;
}
}
return -1;
}
return findIndex.call(arr, function (cur) {
return Object.keys(obj).every(function (key) {
return obj[key] === cur[key];
});
});
}
(из моего ответа на этот дурак )