使用 reduce 将源对象的可枚举属性扩展到目标对象
use reduce to extend enumerable properties of source object(s) to the destination object
我正在开发一个 JavaScript 函数,它将一个源对象(或多个对象——这很重要)的可枚举属性分配给目标对象。附加规定是后续来源会覆盖先前来源的 属性 分配。
我确实搜索并阅读了许多类似的问题,但由于一些原因,我 运行 遇到了麻烦。说实话,卡了三天了
问题点 1:提供的样板只是 function extend(){}
,没有任何参数。我不确定是否要添加参数。我敢肯定它可以写成任何一种方式。
问题点 2:我可以编写成功将一个对象扩展到另一个对象的代码,但无法编写从多个源扩展的代码。
例如,如果要这样调用函数:
extend({ 'name': 'lola' }, { 'age': 9 }, { 'name': 'mickey' });
结果应该是{ 'user': 'mickey', 'age': 9 }
非常感谢指导。
只是为了好玩让我们发明 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));
这似乎是 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 循环遍历对象数组并针对累加器对象执行;
这将修改数组的第一个条目..
使用扩展运算符并分配给新对象可能是更好的解决方案:
var objects = [{ 'name': 'lola' }, { 'age': 9 }, { 'name': 'mickey' }]
var r = Object.assign({}, ...objects )
console.log(r)
我正在开发一个 JavaScript 函数,它将一个源对象(或多个对象——这很重要)的可枚举属性分配给目标对象。附加规定是后续来源会覆盖先前来源的 属性 分配。
我确实搜索并阅读了许多类似的问题,但由于一些原因,我 运行 遇到了麻烦。说实话,卡了三天了
问题点 1:提供的样板只是 function extend(){}
,没有任何参数。我不确定是否要添加参数。我敢肯定它可以写成任何一种方式。
问题点 2:我可以编写成功将一个对象扩展到另一个对象的代码,但无法编写从多个源扩展的代码。
例如,如果要这样调用函数:
extend({ 'name': 'lola' }, { 'age': 9 }, { 'name': 'mickey' });
结果应该是{ 'user': 'mickey', 'age': 9 }
非常感谢指导。
只是为了好玩让我们发明 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));
这似乎是 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 循环遍历对象数组并针对累加器对象执行; 这将修改数组的第一个条目..
使用扩展运算符并分配给新对象可能是更好的解决方案:
var objects = [{ 'name': 'lola' }, { 'age': 9 }, { 'name': 'mickey' }]
var r = Object.assign({}, ...objects )
console.log(r)