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是图灵完整语言吗?是的,有可能…