【面试】reduce()是啥?

这篇博客我感觉写的很不错:reduce的介绍及用法,下面是我个人的面试心得而已

昨天面试,对方当场给我出了道面试题,题目是这样的:

//将对象中的键按字母顺序排序后输出
let _obj = {
    e:5,
    a:9,
    d:3    
}

//输出结果应为:
{
    a:9,
    d:3,
    e:5
}

这应该是属于开发中常见的需求(但是我从来没遇到过就很离谱),于是我原地思考,我的思路是这样:先将对象中的键值取出,对键值进行排序,之后再将排序后的键值返回到新的对象里。

技术点三个:1.从指定对象中取出键值 2.将取出的键值进行排序 3.将排序后的结果返回成新的对象

先看第一步,从指定对象中取出键值,当时我想到了for...of循环,但其实for..of只能遍历可迭代对象,普通对象不属于可迭代对象,因此这步我们不能使用for..of循环,可以用for..in循环获取对象中的键值或者使用Object.keys()将指定对象中的键值以数组返回:

let _obj = {
    e:5,
    a:9,
    d:3    
};

//1.for..in方法
let _arr = []
for (keys in _obj){
    arr.push(keys)
}

//2.Object.keys()方法
Object.keys(_obj)

显然第二个方法更好用,我们就用Object.keys方法往下看。

第二步需要我们将取出的键值进行排序,我们已经用Object.keys获得了一个由_obj对象的键名组成的数组,我们接下来就是要对数组中的元素进行排序:

直接调用数组的sort()方法,默认按照ASCII编码对字母进行排序。

let _arr = Object.keys(_obj).sort()

排序后得到的结果为: 

接下来就是第三步:设置一个新的对象将键返回并赋予对应的值:

    let _obj = {
      e: 5,
      a: 9,
      d: 3
    };
    let _arr = Object.keys(_obj).sort()
    /*
      sortObj:排序对象
        @params: 
          arr:将原对象键的排序好的数组
          obj:原对象
        @return: 排序好的对象
      by Zack on 2022-3-26
    */
    function sortObj(arr, obj) {
      let result = {}
      arr.forEach(item => {
        result[item] = _obj[item]
      })
      console.log(result);
      return result
    }
    sortObj(_arr, _obj)

 通过自己编写一个方法用来处理这样的需求(优化一下可以把将对象中提取键的方法也放入方法中,这边是因为分步所以没有写在方法里),这样就能得到排序后的新对象了,但是这只是我没有接触过reduce()的写法,下面是reduce()的写法:

    let _obj = {
      e: 5,
      a: 9,
      d: 3
    };
    let _arr = Object.keys(_obj).sort()
    //reduce方法
    let _result = arr.reduce((pre, cur) => {
      pre[cur] = _obj[cur]
      return pre
    }, {})
    console.log(_result);

效率更高,代码量更小,完全不明白自己没有早点了解到这个reudce(哭o(╥﹏╥)o)

看都看完了,我希望当面试官问你的时候,你的回答不会是:“reduce....是啥?”

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值