js数组对象去重的五种方式

数组对象:

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();

猜你喜欢

转载自blog.csdn.net/weixin_45990765/article/details/120474742