循环遍历javascript对象

时间:2017-05-12 10:26:57

标签: javascript jquery arrays object filter

我有一个包含许多对象的数组(所有这些数据都将通过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"}];

由于

2 个答案:

答案 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; }