数组对象:
var str = [
{name: "张三",id: 1},
{name: "李四",id: 2},
{name: "王五",id: 3},
{name: "小明",id: 2},
{name: "小红",id: 1},
];
1、双层for循环
for(var i=0;i<str.length - 1;i++){
for(var j = i+1;j<str.length;j++){
if(str[i].id == str[j].id){
str.splice(j,1);
// splice删除了一个元素,下标要减一,否则循环会漏掉一个元素(多个相邻的元素 可能会漏掉删除元素)
j--;
}
}
}
console.log(str);
2、indexOf()
var id = [];
var arr = [];
for(var i=0;i<str.length;i++){
//判断在id这个数组中有没有找到id
if(id.indexOf(str[i].id) == -1){
//把id用push存进id这个数组中
id.push(str[i].id);
arr.push(str[i]);
}
}
console.log(arr);
3、for循环,利用对象属性的唯一性
var result = {};
for (var i = 0; i < str.length; i++) {
result[str[i]['id']] = str[i];
}
console.log(result);
4、Map方法()
has方法可以判断Map对象中是否存在指定元素,有则返回true,否则返回false
set方法可以向Map对象添加新元素 map.set(key, value)
values方法可以返回Map对象值的遍历器对象
function getMap() {
let map = new Map();
for (let i of this.str) {
if (!map.has(i.id)) {
map.set(i.id, i);
}
}
this.str = [...map.values()];
console.log(this.str);
};
getMap();
5、for循环
obj中没有则添加 this.str[i].id 这个key,并把值设为true,后续相同则不添加
function removal() {
let newArr = [];
let obj = {};
for (var i = 0; i < this.str.length; i++) {
if (!obj[this.str[i].id]) {
newArr.push(this.str[i]);
obj[this.str[i].id] = true;
}
}
console.log(newArr);
};
removal();
版权声明:本文为weixin_45990765原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。