遍历javascript对象

遍历javascript对象,javascript,jquery,arrays,object,filter,Javascript,Jquery,Arrays,Object,Filter,我有一个包含许多对象的数组(所有这些数据都将通过ajax调用来获取,例如,假设只有3条记录) 数据:[{name:“a”,id:“100”},{name:“b”,id:“101”},{name:“c”,id:“100”}] 有没有办法在整个数组中循环,找到具有相同id的对象,连接它们的名称,并像这样过滤数组 data : [{name : "a,c",id : "100"},{name : "b",id:"101"}] 谢谢您可以使用forEach()循环并检查id是否存在,并将名称转换为该值

我有一个包含许多对象的数组(所有这些数据都将通过ajax调用来获取,例如,假设只有3条记录)

数据:[{name:“a”,id:“100”},{name:“b”,id:“101”},{name:“c”,id:“100”}]

有没有办法在整个数组中循环,找到具有相同id的对象,连接它们的名称,并像这样过滤数组

data : [{name : "a,c",id : "100"},{name : "b",id:"101"}]
谢谢

您可以使用
forEach()
循环并检查id是否存在,并将名称转换为该值

var data=[{name:“a”,id:“100”},{name:“b”,id:“101”},{name:“c”,id:“100”}];
var结果=[]
data.forEach(函数(e){
//检查作为thisArg参数提供的对象中是否存在具有当前对象id的属性,如果不存在,则将其值设置为当前对象并将其推送到结果数组
如果(!this[e.id])this[e.id]=e,则result.push(this[e.id])
//如果它确实存在,则将当前对象的名称转换为具有相同id的现有对象的名称
否则此[e.id].name+=','+e.name
},Object.create(空))

log(result)
我建议使用哈希表,它用作回调函数的闭包。然后,如果哈希存在或不存在,则迭代对象和ST。如果存在,请将名称添加到对象的name属性中,否则使用实际数据创建一个新对象并将其推送到结果集中

返回中的临时数组

var data=[{name:“a”,id:“100”},{name:“b”,id:“101”},{name:“c”,id:“100”}];
data=data.reduce(函数(散列){
返回函数(r,a){
if(散列[a.id]){
散列[a.id].name+=','+a.name;
}否则{
hash[a.id]={name:a.name,id:a.id};
r、 push(散列[a.id]);
}
返回r;
};
}(Object.create(null)),[]);
控制台日志(数据)

。作为控制台包装{max height:100%!important;top:0;}
要回答您的问题,可能有很多方法。通过查看数组函数,我建议可能重复感谢Nenad。非常感谢。我建议解释它是如何工作的。代码是好的,但解释确实会有帮助。特别是,使用
this
和一个空白对象的技巧。(旁注:注意命名与
对象冲突。原型
,我建议使用
对象。创建(null)
,而不是
{}
;或者如果使用ES2015+,则使用
映射