shi*_*iva -1 javascript arrays
我有一个像这样的 json 对象
var data = [
{
"id": 24,
"title": "BCOM",
"start": "2014-08-05 12:59:00 PM",
"end": "2014-08-05 2:59:00 PM",
"description": "mcom",
"DIFF": 120
},
{
"id": 26,
"title": "MCOM",
"start": "2014-08-10 12:59:00 PM",
"end": "2014-08-10 4:59:00 PM",
"description": "mcom",
"DIFF": 240
},
{
"id": 29,
"title": "MCOM",
"start": "2014-08-11 12:59:00 PM",
"end": "2014-08-11 8:59:00 PM",
"description": "mcom",
"DIFF": 480
},
{
"id": 30,
"title": "MCOM",
"start": "2014-08-13 12:59:00 PM",
"end": "2014-08-13 4:59:00 PM",
"description": "mcom",
"DIFF": 240
}
];
Run Code Online (Sandbox Code Playgroud)
如果您在这里观察到标题 mcom 重复,如果相同的标题重复多次,我想从数组中添加“DIFF”,我想通过 javascript 实现这一点。任何人请帮助我。
我的结果应该是这样的
var data = [
{
"id": 24,
"title": "BCOM",
"start": "2014-08-05 12:59:00 PM",
"end": "2014-08-05 2:59:00 PM",
"description": "mcom",
"DIFF": 120
},
{
"id": 26,
"title": "MCOM",
"start": "2014-08-10 12:59:00 PM",
"end": "2014-08-10 4:59:00 PM",
"description": "mcom",
"DIFF": 960
},
];
Run Code Online (Sandbox Code Playgroud)
谢谢
第一个解决方案(不安全)
var titles = [];
var indexes = [];
var index;
for (var i = 0; i < data.length; i++) {
index = titles.indexOf(data[i].title);
if(index == -1){
titles.push(data[i].title);
indexes.push(i);
} else {
data[indexes[index]].DIFF += data[i].DIFF;
delete data[i];
}
}
Run Code Online (Sandbox Code Playgroud)
解释
为了删除具有重复标题的项目,我们循环遍历数组的所有项目。我们将新标题存储在titles数组中,并用它来检查重复的标题。当我们存储标题时,我们还会存储indexes表中具有该标题的第一个项目的索引。当我们找到具有重复标题的项目时,我们将其 DIFF 添加到具有该标题的第一个元素,然后将其删除。
雷马克
使用运算符delete是危险的,因为它会在数组中产生间隙。也许创建一个新数组来保存新项目会更安全。然后代码将是这样的:
更安全的解决方案
var titles = [];
var uniquesData = [];
var index;
for (var i = 0; i < data.length; i++) {
index = titles.indexOf(data[i].title);
if(index == -1){
titles.push(data[i].title);
uniquesData.push(data[i]);
} else {
uniquesData[index].DIFF += data[i].DIFF;
}
}
data = uniquesData;
Run Code Online (Sandbox Code Playgroud)