Всем привет! Нужно не столько решение, сколько подсказка. Как получить индекс объекта в массиве типа - [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));
В этом решении выполняется лишний проход по массиву по сравнению с самостоятельной выборкой в цикле.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Всем приветКак изменить HTML внутри div span span на чистом JavaScript? делаю пока так
Подскажите пожалуйста как на javascript реализовать дерево ссылокНапример есть такой массив
Когда вывожу элементы подмассива в ячейки таблицы через цикл for, то первым выводится undefined, а потом уже все элементы: undefined Hello world Phrase 23 qwerty...
Ребят, я заканчиваю 4курс универа