Я думал, что если я сохраню исходную ссылку, я бы просто получил индекс
const selected = {id: "abcd123", quantity: "5"};
const location = [
{id: "abcd123", quantity: "3"},
{id: "abcd1234", quantity: "3"},
];
const filterLocation = location.filter(loc => loc.id === selected.id);
console.log(location.indexOf(filterLocation));
Я ожидаю, что он будет записывать 0
но он всегда возвращает -1
. Как это работает?
const selected = {id: "abcd123", quantity: "5"};
const location = [
{id: "abcd123", quantity: "3"},
{id: "abcd1234", quantity: "3"},
];
const filterLocation = location.filter(loc => loc.id === selected.id);
console.log(location.findIndex(value => value.id === filterLocation[0].id )));
filter
возвращает новый массив. Таким образом, вам просто нужен доступ к этому значению, filtered
в этом примере
измените indexOf
для findIndex
. location
- это массив объектов, поэтому вам нужно снова итерации всего массива для восстановления индекса. Конечно, это просто для этого примера, также вы можете восстановить индекс в той же операции filter
.
console.log(location.findIndex(value => value.id === filterLocation[0].id )));
Прежде всего filterLocation
не включает в себя объект, идентичный location
. Он включает единственный объект с одинаковым полем id
но поле quantity
отличается. Во- indexOf
метод indexOf
не работает должным образом для нескалярных аргументов.
Извините моя ошибка
Я думаю, что я должен переключиться на findIndex
вместо indexOf
.
const selected = {id: "abcd123", quantity: "5"};
const location = [
{id: "abcd123", quantity: "3"},
{id: "abcd1234", quantity: "3"},
];
const filterLocation = location.filter(loc => loc.id === selected.id);
console.log(location.findIndex(loc => loc.id === selected.id));
Тогда я бы получил указанный индекс, который мне нужен.
.indexOf(..)
в своем выраженииconsole.log
?selected