阅读 129

一个解构赋值的小技巧

当需要从含有众多字段的一个对象中取出部分字段,来组成新的对象时,你通常会怎么实现?

如果这些字段里,有的字段可能并没有出现呢?是否需要每个字段都判断一次呢?给大家分享一个从 Stack Overflow 上抄来的方法(🤦️):

const pick = (...props) =>
  ob => props.reduce((other, e) => ob[e] !== undefined ? { ...other, [e]: ob[e] } : other, {});
复制代码

这个 pick 方法是一个柯里化的函数,在向其中传入所需字段后,返回的函数可以将入参对象的对应字段提取到新的对象中,并过滤由于入参对象未定义 key 产生的 undefined 值。

调用方法如下:

const source = { a: 1, b: 2, c: 3 };
const result = pick('a', 'c', 'd')(source);  // { a: 1, c: 3 }
复制代码

将这个方法改写得好理解一些:

function pickerGenerate(keys) {
  return function(ob) {
    const result = {};
    keys.forEach(key => {
      if (ob[key] !== undefined) {
        result[key] = ob[key];
      }
    });
    return result;
  }
}
// 生成针对特定字段的 picker 函数
const specifiedPicker = pickerGenerate(['a', 'c', 'd']);
const source = { a: 1, b: 2, c: 3 };
const result = specifiedPicker(source); // { a: 1, c: 3 }
复制代码
关注下面的标签,发现更多相似文章
评论