为什么我的数组在向其追加值时会输出不同的结果?

时间:2017-12-22 12:42:17

标签: javascript arrays loops

鉴于animals = ['ant', 'bear', 'cat', 'dog', 'elephant', 'cat', 'fox', 'goat', 'cat'];这样的数组,我的任务是找出单词cat出现的次数。

我可以执行以下功能并输出结果:

let catCounter = 0;
let result = [];

animals.filter(animal => {
  if (animal === 'cat') {
    catCounter++;
  } result.push(catCounter);
});

console.log(result);

给出了[ 0, 0, 1, 1, 1, 2, 2, 2, 3 ]

我只需要最终结果,即3,我知道通过执行console.log(catCounter);我可以获得所需的结果。

请提供一个简短的解释,说明为什么会发生这种情况,如果有更好的方法来完成我的任务,我们将非常感激,如果可以提供。

2 个答案:

答案 0 :(得分:1)

这样做:



var arrayVal = ['ant', 'bear', 'cat', 'dog', 'elephant', 'cat', 'fox', 'goat', 'cat'];
console.log(arrayVal.filter(function(e){ if(e=='cat'){return e}}).length);




答案 1 :(得分:1)

您使用Array.push()方法,这样,每次使用 push()时,都会向 result 数组附加一个值。这解释了为什么它会导致这样的数组。

让我们通过迭代迭代。

假设以下 animals array ['cat', 'dog', 'chicken', 'cat']

On first loop  =>       increment catCounter (1) and push it to array => `[1]`
On second loop => don't increment catCounter (1) and push it to array => `[1, 1]`
On third loop  => don't increment catCounter (1) and push it to array => `[1, 1, 1]`
On fourth loop =>       increment catCounter (2) and push it to array => `[1, 1, 1, 2]`



如果你想计算你可以做多少只猫:

let catCounter = 0;

animals.forEach(animal => {
  if (animal === 'cat') {
    catCounter++;
  }
});

console.log(catCounter);