[英]javascript: manipulate array of objects
我有一個像這樣的數組:
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怎么可能?
for loop
和Array#splice
,以供索引參考。
// 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 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 }]; var obj = {}, dc = 0, len = arr.length; for (var i = 0; i < len; i++) { var v = arr[i - dc]; if (obj.hasOwnProperty(v.name)) { arr[obj[v.name]].a += va; arr[obj[v.name]].b += vb; arr[obj[v.name]].c += vc; arr.splice(i - dc++, 1); } else { obj[v.name] = i - dc; } } console.log(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 }], grouped = []; arr.forEach(function (a) { if (!this[a.name]) { this[a.name] = { name: a.name }; grouped.push(this[a.name]); } Object.keys(a).forEach(function (k) { if (k !== 'name') { this[k] = (this[k] || 0) + a[k]; } }, this[a.name]); }, Object.create(null)); console.log(grouped);
創建第二個數組。 然后,對於第一個數組的每個元素,迭代第一個數組並將屬性之和推入新數組。 在每個重復項上,您都必須從第一個數組中刪除該條目。 還有田田
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.