Нахождение идентификатора объекта массива по свойству

1

Это может быть дубликат, но я не уверен.

У меня есть следующий массив:

[
  {
    id: "object1"
  },
  {
    id: "object2"
  },
  {
    id: "object3"
  }
]

Фокус в том, что массив динамический, и поэтому глобальные идентификаторы этих объектов массива меняются. Например, массив [1] в одном случае может быть объектом с id "object1", а в другом случае - с идентификатором "object3".

Как запросить этот массив на основе строки id и иметь индекс массива в качестве вывода?

Теги:
arrays

2 ответа

3
Лучший ответ

reduce к объекту, индексированному id, причем значения являются индексом этого объекта id в исходном массиве, а затем вы можете использовать простой поиск объектов:

const input = [
  {
    id: "object1"
  },
  {
    id: "object2"
  },
  {
    id: "object3"
  }
];
const indexedById = input.reduce((a, { id }, i) => {
  a[id] = i;
  return a;
}, {});
console.log(indexedById.object2); // index of 1 in input

.findIndex - еще одна возможность, но она имеет худшую временную сложность, чем поиск объектов.

  • 0
    Спасибо, я получаю номер, который мне нужен, но сразу после этого появляется консольная ошибка "Uncaught TypeError: object2 не является функцией". Я работаю в React.
  • 0
    Похоже, вы пытаетесь вызвать object2 как функцию, но это не функция и даже не автономная переменная - это только свойство аккумулятора
Показать ещё 9 комментариев
2

Array имеет findIndex, поэтому вы можете выполнить const findById = (x) => xs.findIndex(({ id }) => id === x) где x - ваша строка id, а xs - ваш массив объектов.

  • 0
    Спасибо за ответ. Кажется, не работает внутри функции React, и что такое хз?
  • 0
    Я добавил примечание в своем ответе; xs будет массивом, который вы ищете. Вы также можете сделать так, чтобы функция принимала ваш массив, например const findById = (x, xs) => xs.findIndex... и т. Д.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню