从JavaScript对象中选择或省略属性是一个相当常见的问题,没有一个内置的解决方案。在这篇文章中,我们将推出我们自己的pick 和omit 实用函数来帮助我们实现这些目标。
从一个对象中选择属性
如果我们想从一个JavaScript对象中选择任何数量的属性,我们可以实现以下pick 函数。
function pick(obj, ...props) {
return props.reduce(function (result, prop) {
result[prop] = obj[prop];
return result;
}, {});
}
让我们看看这个函数的实际应用吧pick 函数的第一个参数将是我们想要挑选的对象,随后的参数将是我们想要保留的键的名称。
const person = {
name: 'Pete',
dog: 'Daffodil',
cat: 'Omar',
};
const dogPerson = pick(person, 'name', 'dog');
console.log(dogPerson);
// { name: "Pete", dog: "Daffodil" }
我们看到,通过提供person 对象作为第一个参数,然后提供字符串"name" 和"dog" 作为后续参数,我们能够保留我们对象中的"name" 和"dog" 道具,而不考虑"cat" 道具。
从一个对象中省略属性
如果我们想从一个JavaScript对象中省略任何数量的属性,我们可以实现以下omit 函数。
function omit(obj, ...props) {
const result = { ...obj };
props.forEach(function (prop) {
delete result[prop];
});
return result;
}
同样,让我们使用同一个person 对象来看看这个功能的作用。
const person = {
name: 'Pete',
dog: 'Daffodil',
cat: 'Omar',
};
const catPerson = omit(person, 'dog');
console.log(catPerson);
// { name: "Pete", cat: "Omar" }
我们可以看到,通过提供我们的person 对象作为第一个参数,并提供字符串"dog" 作为第二个参数,我们能够得到一个省略了"dog" 属性的新对象!