原生js对数组去重

博客除了是分享,也是积累的过程,有什么好的提议也希望能在评论区留言,共同进步

对数组去重实际上此类文章有很多,仅仅是自己的总结

es6新增方法set

首先set的特性是: Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
根据这一点就可以对数组去重

var a = [1,2,3,4,1,1,3,4];
var res = new Set([...a]);   //   Set(4) {1, 2, 3, 4} [object Set]
需要注意: 直接new Set()  返回结果是Set对象 ,所以需要加一条:
var result = Array.from(new Set([...a])) // (4) [1, 2, 3, 4]
var result = [...new Set([...a])]
对于json数组的去重处理
工作·项目中常遇到的更多是json数组,此时Set则无法使用、故而自己会封装一些方法来使用

/**
 * json数组去重
 * @param arr 原对象json对象
 * @param attribute 去重指定的对象属性
 * */
function uniqueArr(arr, attribute) {
    let temp = [];
    for (let i = 0; i < arr.length; i++) {
        var isRepeat = false;
        for (let j = 0; j < temp.length; j++) {
            if (temp[j][attribute] == arr[i][attribute]) {
                isRepeat = true;
                break;
            }
        }
        if (!isRepeat) temp.push(arr[i]);
    }
    return temp;
}

var arr = [
	{
		id: 1,
		name: 'ming',
		age: '10'
	},
	{
		id: 1,
		name: 'ming',
		age: '10'
	},
	{
		id: 2,
		name: 'zhang',
		age: '12'
	}
]
//根据id来去掉同一个元素,此类情况是后台返回数据都是唯一标识id,
uniqueArr(arr, 'id')

改造下以上方法:
function uniqueArr(arr) {
    let temp = [];let map = {}
    for (let i = 0; i < arr.length; i++) {
    	if (!map[arr[i]) {
			temp.push(arr[i])
			map(arr[i]) = true 
		}
    }
    return temp;
}

uniqueArr(arr)

继续改造:利用indexOf() 方法 同样不适用于json数组,只适合一般的数组
var arr = ['a','c', 'a']
function uniqueArr(arr) {
    let temp = [];
    for (let i = 0; i < arr.length; i++) {
    	if (temp.indexOf(arr[i] === -1)) {
			temp.push(arr[i])
		}
    }
    return temp;
}
uniqueArr(arr)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值