Всем привет! Нужно не столько решение, сколько подсказка. Как получить индекс объекта в массиве типа - [1, 2, 3, 4] - понятно. Не могу понять, как получить индекс объекта вот в таком массиве:
var arrayId = [
{id: 12},
{id: 12},
{id: 12},
{id: 123},
{id: 126},
{id: 1},
{id: 15},
{id: 33}
];
Или, если есть уже ответ, то киньте ссылку, ибо не нашел.
Заранее спасибо!
Весь фокус в том, что в массиве хранятся не сами объекты, а указатели на них и indexOf сравнивает именно указатели. Если мы сконструируем два объекта с одинаковыми полями, то это будут разные объекты
var obj1 = {id: 1};
var obj2 = {id: 1};
console.log(obj1 == obj2); // false
поэтому Вам придется пробежаться в цикле по всему массиву и самостоятельно сравнить объект с каждым элементом массива. Или, как подсказал @Grundy, использовать метод findIndex c callback-функцией
При этом, если Вы не будете конструировать новый объект, а предварительно добудете его из массива, то будет работать и indexOf
var arrayId = [
{id: 12},
{id: 12},
{id: 12},
{id: 123},
{id: 126},
{id: 1},
{id: 15},
{id: 33}
];
function indexObj(AObj) {
for (var i = 0; i < arrayId.length; i++) {
if (arrayId[i].id == AObj.id)
return i;
}
return -1;
}
console.log(arrayId.indexOf({id: 1}));
console.log(indexObj({id: 1}));
var obj = arrayId[2];
console.log(arrayId.indexOf(obj));
console.log(
arrayId.findIndex(
function (AEl) {
return AEl.id == this.id;
},
{id: 1}
)
);
Можно воспользоваться парой функций:
var arrayId = [
{id: 12},
{id: 12},
{id: 12},
{id: 123},
{id: 126},
{id: 1},
{id: 15},
{id: 33}
];
function find(list, id) {
var ok = list.filter(a => a.id === id);
if (!ok.length) return -1;
return list.indexOf(ok[0]);
}
console.log(find(arrayId, 12));
console.log(find(arrayId, 1));
console.log(find(arrayId, 126));
В этом решении выполняется лишний проход по массиву по сравнению с самостоятельной выборкой в цикле.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости