array.find () возвращает элемент и индекс - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть массив данных, и мне нужно вернуть данные из элемента в массиве, а также индекс результата:

Мой код ниже возвращает данные, но не индекс, поэтому я не думаю, что это работает правильно.

Кто-нибудь может посоветовать, как мне добиться того, что я пытаюсь сделать ниже, пожалуйста?

const result = design.data().items.find((e, i, a, arg) => {
  if(e.id === this.props.match.params.item) {
    return {item:e, index: i}
  }
})

Ответы [ 3 ]

0 голосов
/ 05 сентября 2018

Вы можете создать простой метод поиска, который использует findIndex . Если индекс не -1 (элемент был найден), он возвращает элемент и индекс:

const findWithIndex = (arr, predicate) => {
  const index = arr.findIndex(predicate);
    
  return {
    item: index !== -1 ? arr[index] : null,
    index
  };
};

const arr = [{ id: 1}, { id: 2 }, { id: 3 }];

const result = findWithIndex(arr, ({ id }) => id === 2);

console.log(result);

Пример использования с вашим кодом:

findwithIndex(design.data().items, e => this.props.match.params.item);
0 голосов
/ 05 сентября 2018

Вы можете использовать Array.findIndex , чтобы получить индекс элемента. Затем с помощью индекса вы можете получить элемент из массива

const items = design.data().items;
const index = items.findIndex(item => item.id === this.props.match.params.item);
console.log(index);  // gives index
console.log(items[index]);  // gives the element
0 голосов
/ 05 сентября 2018

Вы можете использовать findIndex вместо find метода.

const { items } = design.data();
const id = items.findIndex((e) => e.id === this.props.match.params.item);
if (id !== -1) {
  return { item: items[id], index: id };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...