Finding out how many times an array element appears有一些很好的答案,我真的很喜欢Oriol的答案,但似乎无法弄清楚逻辑。
这里是:
function countInArray(array, value) {
return array.reduce((n, x) => n + (x === value), 0);
}
console.log(countInArray([1, 2, 3, 4, 4, 4, 3], 4)); // 3
我看过https://www.geeksforgeeks.org/javascript-array-reduce-method/和https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce,但恐怕仍对复杂性感到困惑。
我知道0是起始总数,x===1
应该等于1或0,这取决于事实。
我主要与n混淆,因为我读到n是前一个函数的返回值,但是开始时没有前一个函数。
答案 0 :(得分:5)
基本上,以下代码将所有元素添加到数组中:
[1, 2, 3].reduce((a, b) => a + b, 0);
上面的0
是累加器的初始值。 a
是累加器的当前值,每个循环都使用该函数的返回值更新累加器。
在您的代码中:
array.reduce((n, x) => n + (x === value), 0);
您要给value
进行计数。等于true并加到数字上的任何东西都等于1,增加计数。
所以,如果您有类似的东西:
var value = 5;
var x = 5;
var n = 3;
(x === value) // becomes true
n + (x === value);
因此,上面的代码变成n + (true)
,从技术上来说,它是n + 1
。
这样,在您的完整循环中,将使用累加器对值进行计数并作为总和返回给您。
以下代码:
array.reduce((n, x) => n + (x === value), 0);
等同于以下内容:
var count = 0;
for (var i = 0; i < array.length; i++) {
if (array[i] === value)
count = count + 1;
}
return count;
答案 1 :(得分:0)
这会减少value
中的功能计数array
。
.reduce( (n, x) => n + (x === value), 0)
n
是最后的reducer值(第一个值为0
-last reduce的参数)。 x
是当前元素。仅当+(x === value)
等于1
时x
才是value
,否则为0
。因为在=>
之后我们不使用花括号,所以我们返回表达式n + (x === value)
答案 2 :(得分:-1)
Array.reduce 函数用于将Array减小为单个值。它有两个参数
用于归约的函数 此函数传递两个值,第一个是前一个数组的精简值 元素,第二个是当前数组元素。
(可选)简化的初始值,如果忽略,则为第一个数组 使用了元素
示例:
var name = ["J", "a", "v", "a"].reduce((a, b) => a + b); // "Java".
var sum = [1, 2, 3].reduce((a, b) => a + b); // 6.
var ret = functionArray.reduce((retArray, func) => retArray.push(func()), []);
Array.reduce 的另一个表兄弟是 Array.reduceRight ,它基本上相同,但是从右到左(从较高的索引到较低的索引)遍历数组< / p>
示例:
var name = ["a", "v", "a", "J"].reduce((a, b) => a + b); // "Java".