关于javascript:JavaScript三个高阶函数的使用

需要:对数组中的每一项小于100的数字进行乘2比并且计算总和。例如:arr = [10,20,111,333,50,40,60]

第一种办法应用for循环

1.求数组中小于100的数字
    let newArr = []
 (1)for(let i=0;i<arr.length;i++) {  //arr[i] 为每一项
        if(arr[i]<100) {
            newArr.push(arr[i])
        }
    }
 (2)for(let i in arr) { //i为每一项的下标
        if(arr[i]<100) {
            newArr.push(arr[i])
        }
    }
 (3)for(let item of arr) {
        if(item<100) { //item为数组的每一项
            newArr.push(item)
        }
    }
2.对数组newArr中的每一项*2
    let newArr2 = []
 (1)for(let i=0; i<newArr.length;i++) {
        newArr2.push(newArr[i]*2)
    }
 (2)for(let i in newArr2) {
        newArr2.push(newArr[i]*2)
    }
 (3)for(let item of newArr) {
        newArr2.push(item * 2)
    }
3.对新数组newArr2进行求和
   let total = 0
 (1)for(let i=0;i<newArr2.length;i++) {
        total += newArr2[i]
    }
 (2)for(let i in newArr2) {
        total += newArr2[i]
    }
 (3)for(let item of newArr2) {
        total += item
    }

第二种办法:应用高级函数filter/map/reduce

fileter中的回调函数有一个要求:必须返回一个boolean值,当返回true时,函数外部会主动将回调的值退出到新的数组中去,即过滤,将符合条件的增加到新的数组中去
reduce为累加,求和。有两个参数,参数一为前一个值,参数二为后值
map 为映射操作
1.求数组中小于100的数字
  let newArr = arr.filter(item => {
    return item < 100
  })
2.求newArr中每一项乘2的数组
   let newArr2 = newArr.map(item => {
        return item * 2
   })
3.求 newArr2 中的总和
    let total = newArr2.reduce((preValue,n) => {
        total = preValue + n
    },0)   其中0为preValue的初始值
    

第三种办法:

let total = arr.filter(item => {
    return item < 100
}).map(item => {
    return item * 2
}).reduce((preValue,item) => {
    return preValue + item
},0)

第四:第三种的简写

let total = arr.filter(item => item<100).map(item => item * 2).reduce((preValue,item) => preValue + item)

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理