Это может быть дубликат, но я не уверен.
У меня есть следующий массив:
[
{
id: "object1"
},
{
id: "object2"
},
{
id: "object3"
}
]
Фокус в том, что массив динамический, и поэтому глобальные идентификаторы этих объектов массива меняются. Например, массив [1] в одном случае может быть объектом с id "object1", а в другом случае - с идентификатором "object3".
Как запросить этот массив на основе строки id и иметь индекс массива в качестве вывода?
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
- еще одна возможность, но она имеет худшую временную сложность, чем поиск объектов.
Array имеет findIndex
, поэтому вы можете выполнить const findById = (x) => xs.findIndex(({ id }) => id === x)
где x
- ваша строка id, а xs
- ваш массив объектов.
xs
будет массивом, который вы ищете. Вы также можете сделать так, чтобы функция принимала ваш массив, например const findById = (x, xs) => xs.findIndex...
и т. Д.
object2
как функцию, но это не функция и даже не автономная переменная - это только свойство аккумулятора