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"}

 

转载于:https://www.cnblogs.com/renzm0318/p/10684511.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值