Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用reduce将源对象的可枚举属性扩展到目标对象_Javascript_Arrays_Object_Extend_Reduce - Fatal编程技术网

Javascript 使用reduce将源对象的可枚举属性扩展到目标对象

Javascript 使用reduce将源对象的可枚举属性扩展到目标对象,javascript,arrays,object,extend,reduce,Javascript,Arrays,Object,Extend,Reduce,我正在开发一个JavaScript函数,它将源对象(一个或多个对象——这很重要)的可枚举属性分配给目标对象。另一项规定是,后续来源覆盖以前来源的属性分配 我确实搜索并阅读了许多类似的问题,但我遇到了一些麻烦,原因有两个。老实说,我已经坚持了三天了 故障点1:提供的样板文件只是函数extend(){}没有参数。我不确定是否要添加参数。我相信这两种方式都可以 问题点2:我可以编写成功地将一个对象扩展到另一个对象的代码,但不能从多个源进行扩展 例如,如果要这样调用函数: extend({'name':

我正在开发一个JavaScript函数,它将源对象(一个或多个对象——这很重要)的可枚举属性分配给目标对象。另一项规定是,后续来源覆盖以前来源的属性分配

我确实搜索并阅读了许多类似的问题,但我遇到了一些麻烦,原因有两个。老实说,我已经坚持了三天了

故障点1:提供的样板文件只是
函数extend(){}
没有参数。我不确定是否要添加参数。我相信这两种方式都可以

问题点2:我可以编写成功地将一个对象扩展到另一个对象的代码,但不能从多个源进行扩展

例如,如果要这样调用函数:

extend({'name':'lola'},{'age':9},{'name':'mickey'})

结果应该是
{'user':'mickey','age':9}


非常感谢您的指导。

为了好玩,让我们发明
Object.prototype.concat()
。就这样

Object.prototype.concat=函数(…o){
返回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(…对象);

log(JSON.stringify(reduced))只是为了好玩,让我们发明
Object.prototype.concat()
。就这样

Object.prototype.concat=函数(…o){
返回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(…对象);

log(JSON.stringify(reduced))这似乎是一个完美的情况, 这是ES6的一项功能,所以请检查目标浏览器上的支持情况

var objects=[{'name':'lola'},{'age':9},{'name':'mickey'}]
var r=objects.reduce((a,b)=>Object.assign(a,b));

console.log(r)
对于, 这是ES6的一项功能,所以请检查目标浏览器上的支持情况

var objects=[{'name':'lola'},{'age':9},{'name':'mickey'}]
var r=objects.reduce((a,b)=>Object.assign(a,b));

console.log(r)
在第二个代码段中,您甚至不需要空对象,只需执行
var r=object.assign(…objects)这样的操作即可
@Redu是的,您可以,但这会修改第一项;可能是个问题,使用新对象更安全;在第二个代码段中,您甚至不需要空对象,只需执行
var r=object.assign(…objects)
@Redu是的,您可以,但这会修改第一项;可能是个问题,使用新对象更安全;