鉴于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);
我可以获得所需的结果。
请提供一个简短的解释,说明为什么会发生这种情况,如果有更好的方法来完成我的任务,我们将非常感激,如果可以提供。
答案 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);