zoukankan      html  css  js  c++  java
  • 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} 

    正则表达式

    console.log('http://url.com/page?name=Adam&surname=Smith'.match(/([^?=&]+)(=([^&]*))/g)) 
    // ["name=Adam", "surname=Smith"]
    const getUrlParameters = url =>
    url.match(/([^?=&]+)(=([^&]*))/g).reduce(
      (a, v) => (a[v.slice(0, v.indexOf('='))] = v.slice(v.indexOf('=') + 1), a), {}
    )
    console.log(getUrlParameters('http://url.com/page?name=Adam&surname=Smith'))
    //{name: "Adam", surname: "Smith"}
  • 相关阅读:
    LCA算法总结
    【福利】论机房如何关闭方正软件保护卡
    codevs 2190 有理逼近
    用C语言的rand()和srand()产生伪随机数的方法总结
    float,double等精度丢失问题 float,double内存表示
    #incldue<cctype>函数系列
    poj 2348 Euclid's Game 题解
    poj 2240 Arbitrage 题解
    洛谷 p1352 没有上司的舞会 题解
    BZOJ 1093 最大半连通子图 题解
  • 原文地址:https://www.cnblogs.com/renzm0318/p/10684511.html
Copyright © 2011-2022 走看看