Невозможно получить индекс объекта в массиве

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.indexOf(filterLocation));

Я ожидаю, что он будет записывать 0 но он всегда возвращает -1. Как это работает?

  • 0
    Почему вы вызываете .indexOf(..) в своем выражении console.log ?
  • 0
    Я хочу получить индекс selected
Показать ещё 1 комментарий
Теги:
ecmascript-6

3 ответа

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 )));
  • 0
    Это не будет работать. Проверьте результат
  • 0
    Это не работает, indexOf пытается найти строку ("abcd123") в массиве объектов.
1

Прежде всего filterLocation не включает в себя объект, идентичный location. Он включает единственный объект с одинаковым полем id но поле quantity отличается. Во- indexOf метод indexOf не работает должным образом для нескалярных аргументов.

0

Извините моя ошибка

Я думаю, что я должен переключиться на 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));

Тогда я бы получил указанный индекс, который мне нужен.

  • 0
    Если это ваш ответ, вы должны написать его как правильный ответ и принять его (что-то вроде «вместо indexOf», используйте findIndex следующим образом:) .

Ещё вопросы

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