Почему моя функция фильтра не работает?(Javascript) - PullRequest
0 голосов
/ 25 февраля 2019

if блок выполняется правильно.Что не так с кодом?

let arr = [4, -4, 5.8, 1.6];
let newA = arr.filter((x) => {
  if (x > 0 && Number.isInteger(x)) {
    return x * x;
  }
})

console.log(newA);

Ожидаемый результат

[16]

Фактический результат:

[4]

Почему?

Ответы [ 5 ]

0 голосов
/ 25 февраля 2019

С reduce метод:

let arr = [4, -4, 5.8, 1.6];

let newA = arr.reduce( ( acc, x ) => {
  if ( x > 0 && Number.isInteger(x) ) { acc = acc.concat( [x*x] ) } ;
  return acc;
}, []) ;

console.log(newA);
0 голосов
/ 25 февраля 2019

Фильтр просто фильтрует значение и возвращает логический результат. Вы можете использовать map, как показано ниже,

let arr = [4, -4, 5.8, 1.6];
let newA = arr.filter((x) => x > 0 && Number.isInteger(x))
.map((x) => x * x);

console.log(newA);
0 голосов
/ 25 февраля 2019

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

let arr3=[4,-4,5.8,1.6];   
let new3 = arr3.filter((x)=>{ 
    return (x>0 && Number.isInteger(x));
}).map(function(y){ 
return y*y;
})

Сначала извлеките список всех положительных целых чисел, а затем верните квадрат каждого элемента в списке.

0 голосов
/ 25 февраля 2019

Причина уже объяснена в предыдущем ответе, вы можете использовать reduce, если вы хотите использовать одну функцию

let arr = [4, -4, 5.8, 1.6];
let newA = arr.reduce(function(accumulator, current) {
  if (current > 0 && Number.isInteger(current)) {
    accumulator.push(current * current);
  }
  return accumulator
}, [])
console.log(newA)
0 голосов
/ 25 февраля 2019

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

Похоже, вам нужно двадействия, одна фильтрация и изменение отфильтрованных значений.

В этом случае вам нужно Array#filter для получения положительных целых чисел и Array#map для квадратичного значения.

let array = [4, -4, 5.8, 1.6],
    result = array
        .filter(x => x > 0 && Number.isInteger(x))
        .map(x => x * x);

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