reduce多种方法计算数组中某个值的出现次数

先来了解下reduce用法
arr.reduce(callback[, initialValue])

callback执行数组中每个值的函数,包含四个参数:
accumulator 累计器累计回调的返回值; 它是上一次调用回调时返回的累积值,或initialValue(见于下方)。
currentValue 数组中正在处理的元素。
currentIndex 可选  数组中正在处理的当前元素的索引。 
array      可选   调用reduce()的数组
 initialValue 可选
作为第一次调用 callback函数时的第一个参数的值。 如果没有提供初始值,则将使用数组中的第一个元素。 
注:
回调函数第一次执行时,accumulator 和currentValue的取值有两种情况:
如果调用reduce()时提供了initialValueaccumulator取值为initialValuecurrentValue取数组中的第一个值;
如果没有提供initialValue,那么accumulator取数组中的第一个值,currentValue取数组中的第二个值。
    // js原生 + 三元运算符
    function countOccurrences(arr,target) {
        var  num = arr.reduce(function (acc,cur) {
            return cur === target ? acc + 1 : acc + 0
        },0);
        return num
    }
   console.log(countOccurrences([1,2,2,1,2,3],2))
    // 箭头函数 + 三元运算符
    const countOccurrences1 = (arr, target) => arr.reduce((acc, cur) => cur === target ? acc + 1 : acc + 0, 0);
    console.log(countOccurrences1([1,2,2,1,2,3],2))
prop in object  
如果指定的属性在指定的对象或其原型链中,则in 运算符返回true。
参数prop是指属性名或者数组索引

// 数组
var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
1 in trees // 返回true
3 in trees // 返回true
6 in trees // 返回false
"bay" in trees // 返回false (必须使用索引号,而不是数组元素的值)

Symbol.iterator in trees // 返回true (数组可迭代,只在ES2015+上有效)

// 内置对象
"PI" in Math // 返回true

// 自定义对象
var mycar = {make: "Honda", model: "Accord", year: 1998};
"make" in mycar // 返回true

   var arr = [1,2,3,2,4,2]
    let countOccurrences = arr.reduce(function (acc, cur){
        if (cur in acc) {
            acc[cur]++;
        }
        else {
            acc[cur] = 1;
        }
        return acc;
    },{});
    console.log(countOccurrences);  // {1: 1, 2: 3, 3: 1, 4: 1} 

猜你喜欢

转载自www.cnblogs.com/renzm0318/p/10684511.html