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
