Map-Reduce:如何在集合中计数

Jar*_*ler 3 javascript arrays reduce mapreduce

重要编辑:我不能使用filter- 目的是教学。

我有一个数组,我想在其中仅使用map和来计算其验证布尔值的元素的数量reduce

计算数组的大小

我已经写了一些计算数组大小的东西(即:其所有元素的数量),使用reduce

const array_numbers = [12, 15, 1, 1]; // Size : 4
console.log(
              array_numbers.reduce((acc) => {
                return acc + 1;
              }, 0)
);
Run Code Online (Sandbox Code Playgroud)

检查布尔条件的数组元素计数

现在我只想计算验证布尔条件的元素。因此,我必须使用mapbefore reduce,并且 返回的数组的元素map将只是好的元素。

所以我写了这段代码,但它不起作用......事实上,null当我遇到一个不好的元素时(null不幸的是,它被算作 en 元素)。

注意:这里的布尔条件是“元素是偶数吗?(%2 == 0)”。

const array_numbers = [12, 15, 1, 1]; // Size : 4
console.log(
              array_numbers.map((current_value) => {
                if(current_value % 2 == 0) {
                  return current_value;
                }
                return null;

              }).reduce((acc) => {
                return acc + 1;

              }, 0)
);
Run Code Online (Sandbox Code Playgroud)

Ori*_*ori 5

Array#filter数组并检查长度:

const array_numbers = [12, 15, 1, 1];
const result = array_numbers.filter((n) => n % 2 === 0).length;

console.log(result);
Run Code Online (Sandbox Code Playgroud)

或者使用以下方式进行计数Array#reduce

const array_numbers = [12, 15, 1, 1, 4];
const result = array_numbers.reduce((r, n) => n % 2 ? r : r + 1, 0);

console.log(result);
Run Code Online (Sandbox Code Playgroud)

或者,如果必须的话,您可以Array#map使用Array#reduce

const array_numbers = [12, 15, 1, 1, 4];
const result = array_numbers
  .map((n) => n % 2 === 0 ? 1 : 0) // map to 1 or 0 according to the condition
  .reduce((r, n) => r + n); // sum everything

console.log(result);
Run Code Online (Sandbox Code Playgroud)