使用来自其他对象的属性 - 值对创建新对象

时间:2017-12-29 23:49:21

标签: javascript javascript-objects

const ingredients = {
  fruit: 'orange', liquid: 'water', vegetable: 'tomato', spices: 'curry'
};

我想从ingredients中选择一些属性并将其添加到新对象 - shoppingList

现在我这样做:

const shoppingList = {};
shoppingList.fruit = ingredients[fruit];
shoppingList.spices = ingredients[spices];

有没有更方便的方法来做上述事情?我正在设想某种功能,我可以给它ingredientsfruitspices,它将返回一个带有这些属性和值的新对象。

3 个答案:

答案 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))