我正在尝试确定是否有更好/更短的方法来获取对象上的属性子集并将(仅)这些属性添加到另一个对象。显然这不是世界上最重要的事情,但由于我经常做这种事情,所以找出它的理想模式会很好。
假设我有一个对象,例如。
const cheesyRecipes = {
cheesyBread: ...,
grilledCheeseSandwich: ...,
macAndCheese: ...,
...
}
我想将该对象的子集应用于另一个对象,例如。
const cheesyBreadRecipes = {};
// do something with cheesyRecipes?
cheesyBreadRecipes; // == {cheesyBread, grilledCheeseSandwich}
我发现有几种方法可以做到这一点。我可以走老派的路...
const cheesyRecipesWithBread = [`cheesyBread`, `grilledCheeseSandwhich`];
for(var i = 0; i < cheesyRecipesWithBread.length; i++) {
const recipeName = cheesyRecipesWithBread[i];
cheesyBreadRecipes[recipeName] = cheesyRecipes[recipeName];
});
或者我可以更花哨一点,使用reduce
...
[`cheesyBread`, `grilledCheeseSandwhich`].reduce((memo, recipeName) => {
memo[recipeName] = cheesyRecipes[recipename];
return memo;
}, cheesyBreadRecipes);
或者我可以变得更奇特,通过使用 ES6 解构将行数减半......
const {cheesyBread, grilledCheeseSandwhich} = cheesyRecipes;
Object.apply(cheesyBreadRecipes, {cheesyBread, grilledCheeseSandwhich});
但即使是最后一个,显然是最短的,似乎也违反了 DRY 原则,在两行上重复每个菜谱的名称。所以,我的问题是,是否有任何聪明的方法可以使用解构(或其他任何与此相关的方法)将一个对象属性的子集应用于另一个对象,而不必重复每个属性两次?或者我的最后一个例子已经足够好吗?
最佳答案
如果可以使用库,那么 pick 可能会更短。
ver newObj = _.pick(oldObj, ['cheesyBread', 'grilledCheeseSandwhich'])
关于javascript - 是否有更好/更短的模式来在另一个对象上设置对象属性的子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40567875/