js数组高阶函数

定义变量

const arr = [
  { name: '苹果', price: 5.5, count: 3 },
  { name: '香蕉', price: 3.5, count: 5 },
  { name: '葡萄', price: 9.9, count: 16 },
  { name: '蓝莓', price: 12.5, count: 4 },
  { name: '苹果', price: 12.5, count: 4 }
]
const watermelon = { name: '西瓜', price: 2.5, count: 20 }
  1. foreach遍历

    // 查找单价大于6块的水果
    const forEachArr = []
    arr.forEach((item, index) => {
      if (item.price > 6) {
        forEachArr.push(item)
      }
    })
    console.log(forEachArr)
  2. filter过滤数组

    // 查找单价大于6块的水果
    const filterArr = arr.filter(item => item.price > 6)
    console.log(filterArr)
  3. map

    //限时半价处理
    const mapArr = arr.map(item => {
      item.price = item.price / 2
      return item
    })
    console.log(mapArr)
    //打印所有水果名称
    const s = arr.map(item => { return item.name }).join(',')
    console.log(s)
  4. reduce

    //计算购物车总价
    const sum = arr.reduce((oldValue, obj) => {
      oldValue += obj.count * obj.price
      return oldValue
    }, 0)
    console.log('总计:' + sum)
  5. slice/splice

    slice截取一段数组,并返回,splice添加/删除数组元素

    //slice()选取数组的的一部分,并返回一个新数组。
    const sliceArr = arr.slice(0, 3)
    console.log(sliceArr)
    
    //splice()从数组中添加/删除元素,并返回删除的元素。splice(start: number, deleteCount: number, ...items: T[]): T[];
    let spliceRemoveArr = arr.splice(3, 1, watermelon) //如果不加watermelon,就只是删除
    console.log(spliceRemoveArr)
    console.log(arr)
  6. every/some

    every是否符合某个条件一假全假,some一真全真

    const everyRes = arr.every(item => item.price > 2)
    console.log(everyRes)
    const someRes = arr.some(item => item.price > 10)
    console.log(someRes)
  7. shift/pop

    shift删除第一个对象,pop删除最后一个对象 

    // shift()删除数组第一个对象,并返回删除的对象
    const shiftArr = arr.shift()
    console.log(shiftArr)
    
    //pop()删除数组的最后一个元素,并返回删除的元素。
    const popArr = arr.pop()
    console.log(popArr)
  8. find/findIndex/indexOf

    find 返回查找到的对象,findIndex返回对象对应的索引,indexOf返回对象对应的索引

    //查找name为苹果的对象,有且仅有返回查找到的第一个对象,查找不到就返回undefined
    const findArr = arr.find(item => item.name === '苹果')
    const findIndexArr = arr.findIndex(item => item.name === '苹果')
    console.log('findArr--------------')
    console.log(findArr) //{name: "苹果", price: 5.5, count: 3}
    console.log('findIndexArr--------------')
    console.log(findIndexArr) //0
    console.log('indexOf--------------')
    console.log(arr.indexOf(findArr)) //0
  9. 补充剩余常用的方法使用

    //push()向数组的末尾添加一个或更多元素,并返回新的长度。
    const arrLength = arr.push(watermelon)
    console.log(arrLength)
    
    // join()把数组的所有元素放入一个字符串。
    var arrStr = new Array('Google', 'Runoob', 'Taobao')
    var str = arrStr.join()
    console.log('str : ' + str) // Google,Runoob,Taobao

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我理解您的问题了。其实在ES5中的数组高阶函数本质上也是利用了原型的特性。不过在ES6中引入了箭头函数和更加简洁的语法,使得使用高阶函数更加方便。下面我将通过重构ES5中的数组高阶函数来展示如何利用原型的特性。 首先,我们来看一下ES5中的数组高阶函数的写法: ``` var arr = [1, 2, 3, 4, 5]; // map var newArr = arr.map(function(item) { return item * 2; }); // filter var filteredArr = arr.filter(function(item) { return item > 3; }); // reduce var reducedValue = arr.reduce(function(acc, item) { return acc + item; }, 0); ``` 现在我们来利用原型的特性,将这些高阶函数封装到数组的原型中: ``` Array.prototype.myMap = function(callback) { var newArr = []; for (var i = 0; i < this.length; i++) { newArr.push(callback(this[i], i, this)); } return newArr; }; Array.prototype.myFilter = function(callback) { var filteredArr = []; for (var i = 0; i < this.length; i++) { if (callback(this[i], i, this)) { filteredArr.push(this[i]); } } return filteredArr; }; Array.prototype.myReduce = function(callback, initValue) { var acc = initValue || this[0]; var startIndex = initValue ? 0 : 1; for (var i = startIndex; i < this.length; i++) { acc = callback(acc, this[i], i, this); } return acc; }; ``` 现在我们就可以像使用ES5中的数组方法一样来使用我们的自定义方法了: ``` var arr = [1, 2, 3, 4, 5]; // myMap var newArr = arr.myMap(function(item) { return item * 2; }); // myFilter var filteredArr = arr.myFilter(function(item) { return item > 3; }); // myReduce var reducedValue = arr.myReduce(function(acc, item) { return acc + item; }, 0); ``` 以上就是用原型的特性重构ES5中的数组高阶函数的方法。希望可以帮助到您!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值