Используя, например, метод filter (), как я могу вернуть элементы, которые соответствуют условию и его значению индекса одновременно? - PullRequest
2 голосов
/ 10 апреля 2020

Вот пример кода:

const nums = [1, 1, 3, 2, 2, 2, 2, 2, 2, 2];

    oddArr = arrNum.filter(function(num,index){
      return num % 2 != 0
    })

    evenArr = arrNum.filter(function(num,index){
      return num % 2 === 0
    })

Здесь я хотел бы вернуть новый массив с исходным индексом каждого элемента, который удовлетворяет условию. Я попытался поместить, после условия (num% 2 === 0), но ничего

В случае поиска числа шансов, я хотел бы получить вывод, подобный этому (полужирные данные относятся к индексу это число в исходном массиве: [1, 0 , 1, 1 , 3, 2 ] Может быть, получить объект для каждого результата будет лучше. как это:

[
{1,0},
{1,1},
{3,2}
]

Я даже не знаю, возможно ли это, но мне интересно, потому что этот другой код эффективно работает:

function array_odd_even_position(a) {
   return a.filter((num,index) => console.log(num,index));
}

array_odd_even_position([1, 1, 3, 2, 2, 2, 2, 2, 2, 2])

Ответы [ 2 ]

3 голосов
/ 10 апреля 2020

filter сам по себе здесь бесполезен, поскольку он всегда будет возвращать значения массива, а не его индексы. Тем не менее, это будет делать:

oddIndexes = arrNum.map((_, idx) => idx).filter(idx => arrNum[idx] % 2)

Сначала сопоставьте ваш массив с массивом индексов, затем отфильтруйте их. Вы можете использовать reduce, чтобы сделать это за одну итерацию:

oddIndexes = arrNum.reduce((acc, n, idx) => {
    if (n % 2) {
        acc.push(idx);
    }
    return acc;
}, []);
2 голосов
/ 10 апреля 2020

Поскольку фильтр может фильтровать только элементы, и вам нужно как фильтровать, так и изменять возвращаемые значения, вы можете использовать метод reduce и делать оба в одном go.

const nums = [1, 1, 3, 2, 2, 2, 2, 2, 2, 2];

const { odd, even } = nums.reduce((r, e, i) => {
  let key = (e % 2 == 0) ? 'even' : 'odd';
  r[key].push(i)
  return r
}, { odd: [], even: [] })


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