let arr = [{a:1,b:1,c:1,d:1,e:1},{a:1,b:1,c:1,d:2,e:2},{a:2,b:2,c:2,d:1,e:1}]
我想要abc值相同的保留一个,同时abc值相同的d相加
所以应该变成
arr1=[{a:1,b:1,c:1,d:3,e:1},{a:2,b:2,c:2,d:1,e:1}]
用到了数组的splice(index,endlength,item)方法,删除数组中的项,里面可以有三个参数
注意 会改变原数组
返回值 删除的项组成的新数组
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script type="text/javascript">
var arr = [{a:1,b:1,c:1,d:1,e:1},{a:1,b:1,c:1,d:2,e:2},{a:2,b:2,c:2,d:1,e:1}];
//循环开始
for(var i=0;i<arr.length-1;i++){
//遍历数组中a b c 都一样的才往下进行
if((arr[i].a == arr[i+1].a) && (arr[i].b == arr[i+1].b) && (arr[i].c == arr[i+1].c)){
//删除重复的那一个元素,改变了数组
arr.splice(i,1);
//d的值累加
arr[i].d += arr[i+1].d;
console.log(arr)
}
}
</script>
</body>
</html>
追问当我三个对象相同时,得出的结果跟我想要的就不一样了
那我要e值相同的对象不能相加并且只留下d值最大的那个 应该怎么做呢?
追答那就比较e 如果相同就判断当前d的值是否小于比较的成员 如果是就 就交换一下成员 然后删除小的 如果不小于则直接删除比较的成员
追问能提供下代码吗 我试了下 做不出来
追答for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i].e==arr[j].e ){
if(arr[i].d<arr[j],d){
arr[i]=arr[j];
}
arr.splice(j,1);
j--;
}
}
}
可能我说的不大清楚,我的意思是说在原有的abc值相同的保留一个,同时abc值相同的d相加 这个条件下 再加一个e值相同的对象不能相加并且只留下d值最大的那个 这个条件
追答for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i].a==arr[j].a && arr[i].b==arr[j].b && arr[i].c==arr[j].c){
if(arr[i].e==arr[j].e ){
if(arr[i].d<arr[j],d){
arr[i]=arr[j];
}
}
else arr[i].d+=arr[j].d;
arr.splice(j,1);
j--;
}
}
}
最开始的问题能不能不改变原数组的情况下,去做一个rolls的相加呢
追答不改原数组 你rolls是什么?
本回答被提问者采纳