Array.find () или Array.some (), но возвращают пользовательское значение - PullRequest
0 голосов
/ 26 февраля 2020

Что я могу сделать:

const val = array.find((val) => <condition>);
const index = array.indexOf(val);

Что я хотел бы сделать:

const { val, index } = array.someFunc((val, index) => <condition> && { val, index });

Что-нибудь подобное там? some() сводится к логическому значению, а find() просто возвращает элемент массива, но ни один не подходит для варианта использования.

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

Нет встроенного для этого. Но можно использовать Object.entries:

const array = ['foo', 'bar', 'baz'];

const [ index, val ] = Object.entries(array).find(([i, v]) => v === 'baz');

console.log(index, val);
0 голосов
/ 26 февраля 2020

Нет встроенного прототипа, который бы делал это для массива, поэтому вам нужно будет создать функцию-оболочку.

let numbers = [10, 20, 30, 40, 50];

function myFunction(array, find) {
  const val = array.find((val) => find == val);
  const index = array.indexOf(val);
  return { val, index };
}

console.log(myFunction(numbers, 30));

Наименее любимым вариантом большинства людей является расширение Array.prototype, так что вы можете вызвать функцию array.myFunction(40)

let numbers = [10, 20, 30, 40, 50];

Array.prototype.myFunction = function(find) {
  const val = this.find((v) => find == v);
  const index = this.indexOf(val);
  return { val, index };
}

console.log(numbers.myFunction(30));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...