我有一个包含许多对象的数组(所有这些数据都将通过ajax调用,例如,假设只有3条记录)。
this.userService.user.pf.account.splice(index, 1); // remove account by index
delete this.userService.user.pf.account[index].cyc; // delete cyc from acccount by index
有没有办法循环遍历整个数组并查找具有相同id的对象并连接它们的名称并将数组过滤为这样
data : [{name : "a",id : "100"},{name : "b",id : "101"},{name : "c",id : "100"}];
由于
答案 0 :(得分:1)
您可以使用forEach()
循环并检查id是否存在,并将该名称连接到该值。
var data = [{name : "a",id : "100"},{name : "b",id : "101"},{name : "c",id : "100"}];
var result = []
data.forEach(function(e) {
//Check if property with current object id exists in object provided as thisArg param and if it doesn't exists set its value to current object and push it to result array
if(!this[e.id]) this[e.id] = e, result.push(this[e.id])
// if it does exists then concat name of current object to name of existing one that had the same id
else this[e.id].name += ',' + e.name
}, Object.create(null))
console.log(result)
答案 1 :(得分:0)
我建议使用哈希表,它用作回调函数的闭包。然后迭代对象和如果哈希存在与否。如果存在,则将名称添加到对象的name属性,否则使用实际数据创建一个新对象并将其推送到结果集。
在Array#reduce
中返回临时数组。
var data = [{name : "a",id : "100"},{name : "b",id : "101"},{name : "c",id : "100"}];
data = data.reduce(function (hash) {
return function (r, a) {
if (hash[a.id]) {
hash[a.id].name += ',' + a.name;
} else {
hash[a.id] = { name: a.name, id: a.id };
r.push(hash[a.id]);
}
return r;
};
}(Object.create(null)), []);
console.log(data);

.as-console-wrapper { max-height: 100% !important; top: 0; }