javascript:操纵对象数组

javascript:操纵对象数组,javascript,arrays,performance,Javascript,Arrays,Performance,我有这样一个数组: arr = [ {name:'Tom', a:1, b:1, c:0}, {name:'Sam', a:0, b:1, c:1}, {name:'Tom', a:0, b:0, c:1}, {name:'Sam', a:1, b:2, c:1}, {name: 'Jack', a:1, b:2, c:0} ] 我需要对同名对象的属性求和,然后对重复项进行切片: arr = [ {name:'Tom', a:1, b:1, c:1}, {name:

我有这样一个数组:

arr = [
  {name:'Tom', a:1, b:1, c:0},
  {name:'Sam', a:0, b:1, c:1},
  {name:'Tom', a:0, b:0, c:1},
  {name:'Sam', a:1, b:2, c:1},
  {name: 'Jack', a:1, b:2, c:0}
]
我需要对同名对象的属性求和,然后对重复项进行切片:

arr = [
  {name:'Tom', a:1, b:1, c:1},
  {name:'Sam', a:1, b:3, c:2},
  {name: 'Jack', a:1, b:2, c:0}
]

在纯JavaScript中如何实现这一点

创建第二个数组。然后,对于第一个数组的每个元素,迭代第一个数组,并将属性之和推送到新数组。对于每个副本,必须从第一个数组中删除条目。和tada…

使用对象作为索引参考

// object reference for index
var obj = {},
  //  variable for delete count
  dc = 0,
  // variable for length of array
  len = arr.length;

// iterate over the object array
for (var i = 0; i < len; i++) {
  // get the current object
  var v = arr[i - dc];
  // check property defined in reference object
  if (obj.hasOwnProperty(v.name)) {
    // if already defined add the values
    arr[obj[v.name]].a += v.a;
    arr[obj[v.name]].b += v.b;
    arr[obj[v.name]].c += v.c;
    // if there is random properties are there then use 
    // Object.keys to get the property name value array
    // and iterate and update the properties ( except `name` )

    // remove the current element and increment delete count
    arr.splice(i - dc++, 1);
  } else {
    // else define the index reference in object
    obj[v.name] = i - dc;
  }
}
//索引的对象引用
var obj={},
//用于删除计数的变量
dc=0,
//数组长度的变量
len=arr.长度;
//迭代对象数组
对于(变量i=0;i
var-arr=[{
名字:“汤姆”,
答:1,,
b:1,
c:0
}, {
姓名:“山姆”,
答:0,,
b:1,
c:1
}, {
名字:“汤姆”,
答:0,,
b:0,
c:1
}, {
姓名:“山姆”,
答:1,,
b:2,
c:1
}, {
名字:“杰克”,
答:1,,
b:2,
c:0
}];
var obj={},
dc=0,
len=arr.长度;
对于(变量i=0;i控制台日志(arr)随机属性提案,带有哈希表

var arr=[{name:'Tom',a:1,b:1,c:0},{name:'Sam',a:0,b:1,c:1},{name:'Tom',a:0,b:0,c:1},{name:'Sam',a:1,b:2,c:1},{name:'Jack',a:1,b:2,c:0}],
分组=[];
arr.forEach(功能(a){
如果(!此[a.name]){
这个[a.name]={name:a.name};
push(这个[a.name]);
}
Object.keys(a).forEach(函数(k){
如果(k!=“name”){
这个[k]=(这个[k]| 0)+a[k];
}
},这个[名字];
},Object.create(null));

控制台日志(分组)Javascript是图灵完整语言吗?是的,有可能…