一个解构赋值的小技巧

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

若是这些字段里,有的字段可能并无出现呢?是否须要每一个字段都判断一次呢?给你们分享一个从 Stack Overflow 上抄来的方法(🤦️):java

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

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

调用方法以下:spa

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

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

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 }
复制代码
相关文章
相关标签/搜索