这句JS代码是什么意思?

image.png

const pluckDeep = key => obj => key.split('.').reduce((accum, key) => accum[key], obj)
阅读 2.6k
3 个回答

就是取嵌套属性值:

let data = {
  a: {
    b: {
      c: {
        d: 1
      }
    }
  }
}

pluckDeep('a.b.c.d')(data) //返回1

说实话写得极其糟糕,这样的代码短但并不简洁,并且没处理空值。

好的代码,应该易读、易用,并且健壮。

如果实现这样一个接口,暴露给外部应该是直接接收2个参数:obj和keyString。而不是像现在接收一个参数,返回一个函数,再接收一个参数,再返回结果,反直观思维。

var pluckDeep = function pluckDeep(key) {
  return function (obj) {
    return key.split('.').reduce(function (accum, key) {
      return accum[key];
    }, obj);
  };
};

看上去就是根据字符串来取深层对象。

类似于 lodash 的 _.get 方法,但是没处理空指针问题。

比如有一个对象:

let obj = { a: { b: { c: 'HelloWorld' } } }

取值的时候可以:

let val = pluckDeep('a.b.c')(obj); // HelloWorld
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题