我正在开发一个JavaScript函数,它将源对象的可枚举属性(或对象 - 重要的)分配给目标对象。另外一项规定是,后续来源会覆盖以前来源的财产分配。
我确实搜索并阅读了许多类似的问题,但我遇到了麻烦,原因有两个。说实话,我已经坚持了三天。
故障点1:提供的样板仅为function extend(){}
,没有参数。我不确定是否要添加参数。我敢肯定它可以写成任何一种方式。
麻烦点2:我可以编写成功将一个对象扩展到另一个对象的代码,但不会从多个来源扩展。
因此,例如,如果要调用该函数:
extend({ 'name': 'lola' }, { 'age': 9 }, { 'name': 'mickey' });
结果应为{ 'user': 'mickey', 'age': 9 }
非常感谢指导。
答案 0 :(得分:2)
这似乎是Object.assign的完美情况, 这是ES6功能,因此请检查目标浏览器的支持;
var objects = [{ 'name': 'lola' }, { 'age': 9 }, { 'name': 'mickey' }]
var r = objects.reduce((a,b) => Object.assign(a,b));
console.log(r)
在这个片段中,我使用[].reduce来循环遍历对象数组并对累加器对象执行; 这将修改数组的第一个条目..
使用spread运算符并分配给新对象可能是更好的解决方案:
var objects = [{ 'name': 'lola' }, { 'age': 9 }, { 'name': 'mickey' }]
var r = Object.assign({}, ...objects )
console.log(r)
答案 1 :(得分:1)
只是为了好玩,我们发明Object.prototype.concat()
。在这里;
Object.prototype.concat = function(...o){
return o.reduce((p,c) => (Object.keys(c).forEach(k => p[k] = c[k]),p),this);
};
var objects = [{ 'name': 'lola' }, { 'age': 9 }, { 'name': 'mickey' }],
reduced = {}.concat(...objects);
console.log(JSON.stringify(reduced));