js删除一个数组中重复的所有对象(不是去重)
思路如下:
1、首先把原始数组赋值给一个新数组newArr,然后循环两个数组,当属性值完全相同时,记录count计数器的大小;
2、判断count是否大于1,大于1说明重复;
3、删除重复对象,索引集合为indexArr,记得每次删除,索引减一,因为每次删除,newArr数组都会改变
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>删除同一个数组中所有的相同对象(不是去重)</title>
</head>
<body>
</body>
<script type="text/javascript">
let arr = [{
name: "张三",
id: "1"
},
{
name: "李四",
id: "2"
},
{
name: "李四",
id: "2"
},
{
name: "小兰",
id: "3"
},
{
name: "张三",
id: "1"
},
{
name: "张三",
id: "1"
}
]
let list = fun(arr);
console.log(list, "结果")
function fun(arr) {
let newArr = [...arr];
let indexArr = [];
arr.forEach((s, i) => {
let count = 0;
newArr.forEach((m, j) => {
if (arr[i].name == newArr[j].name && arr[i].id == newArr[j].id) { //当属性值都相同时,打印索引位置
count++;
}
})
// console.log("索引:",i,"相同次数:",count)
if (count > 1) { //内层循环结束,当count>1,说明此索引为对象是重复的
indexArr.push(i);
}
})
// console.log(indexArr) //相同对象索引数组
let flag = -1;
for (var i = 0; i < indexArr.length; i++) { //删除一次,索引位
flag++;
if (flag == 0) {
newArr.splice(indexArr[i], 1);
} else {
newArr.splice(indexArr[i] - flag, 1); // 每次删除,需要删除的索引位就要减去1
}
}
return newArr;
}
</script>
</html>