当须要从含有众多字段的一个对象中取出部分字段,来组成新的对象时,你一般会怎么实现?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 }
复制代码