const ingredients = {
fruit: 'orange', liquid: 'water', vegetable: 'tomato', spices: 'curry'
};
我想从ingredients
中选择一些属性并将其添加到新对象 - shoppingList
。
现在我这样做:
const shoppingList = {};
shoppingList.fruit = ingredients[fruit];
shoppingList.spices = ingredients[spices];
有没有更方便的方法来做上述事情?我正在设想某种功能,我可以给它ingredients
,fruit
和spices
,它将返回一个带有这些属性和值的新对象。
答案 0 :(得分:1)
您可以使用reduce根据传递给函数的键生成新对象。
小型运行示例:
const ingredients = {
fruit: 'orange',
liquid: 'water',
vegetable: 'tomato',
spices: 'curry'
};
function pick(keys, obj) {
const newObj = keys.reduce((result, currentKey) => {
result[currentKey] = obj[currentKey];
return result;
}, {});
return newObj;
}
const myKeys = ['fruit', 'spices'];
const customObj = pick(myKeys, ingredients);
console.log(customObj);
如果你真的疯了,你可以将它添加到Object.prototype
并直接在对象上调用它。
请注意,这会将pick
方法添加到所有对象,因此可以考虑将其添加到您的某些对象中:
const ingredients = {
fruit: 'orange',
liquid: 'water',
vegetable: 'tomato',
spices: 'curry'
};
Object.prototype.pick = function(keys){
const newObj = keys.reduce((result, currentKey) => {
result[currentKey] = this[currentKey];
return result;
}, {});
return newObj;
}
const myKeys = ['fruit', 'spices'];
const customObj = ingredients.pick(myKeys);
console.log(customObj);
答案 1 :(得分:0)
您可以使用以您喜欢的方式对其进行解构的功能。
function applySpicesandFruit ({ fruit, spices}) {
this.fruit = fruit;
this.spices = spices
return this;
}
applySpicesandFruit.call(shoppinglist, ingredients);
答案 2 :(得分:0)
我不会为你提供一个功能,我只是相信这种方式更加干净
const ingredients = {
fruit: 'orange',
liquid: 'water',
vegetable: 'tomato',
spices: 'curry'
}
//ingredients, fruit and spices
const {
fruit,
spices
} = ingredients
const newObj = {
fruit,
spices
}
document.write(JSON.stringify(newObj))