@svk44

Как вывести индексы массива объектов?

Начинаю изучать js.
Индекс - это задаваемый по умолчанию порядковый номер элемента массива, начиная с нуля, верно? (если нет, то прошу поправить)

Если так, допустим есть массив объектов:
const users = [
...,
    {
        "id" : 5,
        "name" : "Jalla",
        "lastName" : "Koo",
        "age" : 22
    },
    {
        "id" : 6,
        "name" : "Jalla",
        "lastName" : "Koo",
        "age" : 22
    },
    {
        "id" : 7,
        "name" : "Lella",
        "lastName" : "Moo",
        "age" : 33
    },
]

Пытаюсь вывести индексы элементов:
const indexArr = users.map(( item, index ) => item.index)
console.log(indexArr)

почему выводит undefined?

И если описание того, что такое индекс, в начале вопроса верно, то почему таким образом ТОЛЬКО ПО ИНДЕКСУ мы можем избавиться от дубликатов:
const fullNames = users.map( fullName ).filter(( item,  index, array ) => {
    return array.indexOf( item ) === index
})
console.log(fullNames)
  • Вопрос задан
  • 2259 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
путаете индекс массива со свойством id в ваших объектах?
const indexArr = users.map(( item, index ) => item.index)
нет у item'а свойства "index". Тогда уж, возвращайте переданный index: (item, index) => index Впрочем, индексы выводить, скорее всего, не нужно — для чего печатать числа от 0 до N.

const fullNames = users.map( fullName ).filter(( item,  index, array ) => {
    return array.indexOf( item ) === index
})

Что здесь происходит: сначала из массива объектов через метод массива .map() создаётся новый массив, состоящий только из полных имён. Функцию fullName() вы не привели в вопросе, но скорее всего, она из item'а делает строку item.name + ' ' + item.lastName

Далее, этот массив фильтруется – остаются только те имена, для которых их индекс в массиве равен индексу первого найденного такого же имени.

Например
массив ['Вася', 'Оля', 'Вася']
Поиск имени "Вася" вернёт 0 - в нулевой позиции он нашёлся. Для первого Васи это ок, он останется. Зато для третьего Васи индекс будет 2, а поиск вернёт всё тот же 0. Так как 2 !== 0, дубликат-Вася вылетает и не попадает в результат.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@defriz
люблю js
выводит undefined так, как метод .map проходит по всему массиву, т.е каждый объект пользователя в этом массиве и у него нет параметра (значения) index.
если Вам нужно узнать индекс какого-либо элемента массива по его параметру (например по айди), то нужно пройтись с помощью map по всему массиву и indexOf узнать его индекс по нужной переменной, пример:
const id = 5;
const users = [
    {
        "id" : 5,
        "name" : "Jalla",
        "lastName" : "Koo",
        "age" : 22
    },
    {
        "id" : 6,
        "name" : "Jalla",
        "lastName" : "Koo",
        "age" : 22
    },
    {
        "id" : 7,
        "name" : "Lella",
        "lastName" : "Moo",
        "age" : 33
    }
];
const index = users.map(x => x.id).indexOf(id);
Ответ написан
KKOOLL
@KKOOLL
full stack-developer
Если используете JQuery примерно так будет идти перебор массива
users.forEach(e=>{
console.log(e.id);
})
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы