JS给数组去重有哪些方式,分别是什么
导读:在实际案例的操作过程中,我们可能会遇到“JS给数组去重有哪些方式,分别是什么”这样的问题,那么我们该如何处理和解决这样的情况呢?这篇小编就给大家总结了一些方法,具有一定的借鉴价值,希望对大家有所帮助,接下来就让小编带领大家一起了解看看吧。...
在实际案例的操作过程中,我们可能会遇到“JS给数组去重有哪些方式,分别是什么”这样的问题,那么我们该如何处理和解决这样的情况呢?这篇小编就给大家总结了一些方法,具有一定的借鉴价值,希望对大家有所帮助,接下来就让小编带领大家一起了解看看吧。
1.es5常用:利用for嵌套for,然后splice去重
function unique(arr) { for (var i = 0; i arr.length; i++) { for (var j = i + 1; j arr.length; j++) { if (arr[i] == arr[j]) { //第一个等同于第二个,splice方法删除第二个 arr.splice(j, 1); j--; } } } return arr; } var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, nan, nan, 'nan', 0, 0, 'a', 'a', { } , { } ]; console.log(unique(arr))
解析:两个null消失,nan和{ } 没有去重
2.es6常用:set去重
function unique(arr) { return array.from(new set(arr)) } var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, nan, nan, 'nan', 0, 0, 'a', 'a', { } , { } ]; console.log(unique(arr))
解析:去重代码少。但是无法去除{ } 空对象。
3.indexof去重
function unique(arr) { if (!array.isarray(arr)) { console.log('type error!') return } var array = []; //新建空数组,for循环原数组,判断数组是否存在当前元素,如果相同的值跳过,不同push进数组 for (var i = 0; i arr.length; i++) { if (array.indexof(arr[i]) === -1) { array.push(arr[i]) } } return array; } var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, nan, nan, 'nan', 0, 0, 'a', 'a', { } , { } ]; console.log(unique(arr))
解析:nan、{ } 没有去重
4.sort()排序
//排序后的结果,遍历对比 function unique(arr) { if (!array.isarray(arr)) { console.log('type error!') return } arr = arr.sort() var arrray = [arr[0]]; for (var i = 0; i arr.length; i++) { if (arr[i] !== arr[i - 1]) { arrray.push(arr[i]); } } return arrray } var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, nan, nan, 'nan', 0, 0, 'a', 'a', { } , { } ]; console.log(unique(arr))
解析:nan、{ } 没有去重
5.对象属性不能相同(不建议)
function unique(arr) { if (!array.isarray(arr)) { console.log('type error!') return } var array = []; var obj = { } ; for (var i = 0; i arr.length; i++) { if (!obj[arr[i]]) { array.push(arr[i]) obj[arr[i]] = 1 } else { obj[arr[i]]++ } } return array; } var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, nan, nan, 'nan', 0, 0, 'a', 'a', { } , { } ]; console.log(unique(arr))
解析:两个true去掉,nan和{ } 没有去重
6.includes()
function unique(arr) { if (!array.isarray(arr)) { console.log('type error!') return } var array = []; for (var i = 0; i arr.length; i++) { if (!array.includes(arr[i])) { //includes 检测数组是否有某个值 array.push(arr[i]); } } return array } var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, nan, nan, 'nan', 0, 0, 'a', 'a', { } , { } ]; console.log(unique(arr))
解析:{ } 没有去重
7.hasownproperty
function unique(arr) { var obj = { } ; return arr.filter(function(item, index, arr){ return obj.hasownproperty(typeof item + item) ? false : (obj[typeof item + item] = true) } ) }
解析:所有都去重
8.filter
function unique(arr) { return arr.filter(function (item, index, arr) { //当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素 return arr.indexof(item, 0) === index; } ); } var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, nan, nan, 'nan', 0, 0, 'a', 'a', { } , { } ]; console.log(unique(arr))
解析:{ } 没有去重、nan两个都没有了
9.利用递归去重
function unique(arr) { var array = arr; var len = array.length; array.sort(function (a, b) { //排序后更加方便去重 return a - b; } ) function loop(index) { if (index > = 1) { if (array[index] === array[index - 1]) { array.splice(index, 1); } loop(index - 1); //递归loop,然后数组去重 } } loop(len - 1); return array; } var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, nan, nan, 'nan', 0, 0, 'a', 'a', { } , { } ]; console.log(unique(arr))
解析:nan和{ } 没有去重
10.map去重
function arraynonrepeatfy(arr) { let map = new map(); let array = new array(); // 数组用于返回结果 for (let i = 0; i arr.length; i++) { if (map.has(arr[i])) { // 如果有该key值 map.set(arr[i], true); } else { map.set(arr[i], false); // 如果没有该key值 array.push(arr[i]); } } return array; } var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, nan, nan, 'nan', 0, 0, 'a', 'a', { } , { } ]; console.log(arraynonrepeatfy(arr))
解析:创建一个空map数据结构,遍历需要去重的数组,把数组的每一个元素作为key存到map中。由于map中不会出现相同的key值,所以最终得到的就是去重后的结果。{ } 空对象无法去重。
11.reduce+includes
function unique(arr) { return arr.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], []); } var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, nan, nan, 'nan', 0, 0, 'a', 'a', { } , { } ]; console.log(unique(arr));
解析:{ } 无法去重
以上就是关于JS给数组去重有哪些方式,分别是什么的介绍啦,需要的朋友可以参考上述内容,希望对大家有帮助,欢迎关注网络,小编将为大家输出更多高质量的实用文章!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: JS给数组去重有哪些方式,分别是什么
本文地址: https://pptw.com/jishu/654391.html