abc.filter()。map()==>减少()我应该如何使用它?的JavaScript

时间:2018-10-07 19:57:09

标签: javascript dictionary filter reduce

有一个数组:

return new ResponseEntity<>(
            new personResponsePayload(id, name, address),
            HttpStatus.OK
);

请问,如何使用reduce()编写此代码?关键是-在给定数组(仅整数)中获取大于“ 0”的平方数。有任何想法吗?谢谢。

2 个答案:

答案 0 :(得分:3)

您可以使用conditional (ternary) operator ?:并取平方值或空数组作为求和到累加器。

var x = [12, 2, 3.5, 4, -29],
    squared = x.reduce((r, a) => r.concat(a > 0 && Number.isInteger(a)
        ? a ** 2
        : []
    ), []);

console.log(squared);

或者像Bergi所建议的那样,传播价值。

var x = [12, 2, 3.5, 4, -29],
    squared = x.reduce((r, a) => a > 0 && Number.isInteger(a) ? [...r, a ** 2] : r , []);

console.log(squared);

答案 1 :(得分:1)

原文:

let x = [12,2,3.5,4,-29];
let squared = x.filter((a) => a>0 && Number.isInteger(a)).map((a) => a**2);

现在,考虑一下我们要使用reduce方法要做的事情。

我们想要一个数组并返回一个新数组,该数组由原始数组中所有正整数的平方组成。

这意味着我们在reduce中的累加器应该是一个数组,因为我们在最后返回一个数组。这也意味着我们需要包括逻辑控制流,以便仅将累加正整数的元素添加到累加器中。

请参见下面的示例:

const x = [12,2,3.5,4,-29];
const squared = x.reduce((acc, val) => val > 0 && val % 1 === 0 ? acc.concat(val ** 2) : acc, []);

console.log(squared);
// [144, 4, 16]