java数组去重的⽅法_JavaScript中数组去重的⼏种⽅法JavaScript中数组去重的⼏种⽅法
正常情况下,数据去重的⼯作⼀般都是由后端同事来完成的,但是前端也要掌握好处理数据的能⼒,万⼀去重的⼯作交给我们⼤前端处理,我们也不能怂呀。现在我总结了⼀些去重的⽅法,希望对⼤家有点帮助。
⽅法⼀:new Set()实现数组去重
ES6 提供了新的数据结构 Set,它类似于数组,但是成员的值都是唯⼀的,没有重复的值。 Set 本⾝是⼀个构造函数,⽤来⽣成 Set 数据结构。Set函数可以接受⼀个数组,⽤于初始化。根据 Set的数据特性,我们可以实现数组去重。
let list = [1, 1, 'a', 'a', true, true, false, false, null, '', null, '', undefined, undefined];
let list1 = Array.from(new Set(list)); // [ 1, "a", true, false, null, "", undefined ]
let list2 = [...new Set(list)]; // [ 1, "a", true, false, null, "", undefined ]
⽅法⼆:some()+循环去重
some() ⽅法⽤于检测数组中的元素是否满⾜指定条件(函数提供) 。 如果有⼀个元素满⾜条件,则表达式返回true , 剩余的元素不会再执⾏检测。 如果没有满⾜条件的元素,则返回false。 我们可以定义⼀个新数组来承接没有重复的数据,遍历原始数组的时候,⽤新数组来判断数据是否已经出现过。typeof array
function distinct(list) {
let result = [list[0]];// ⽤于承接没有重复的数据,初始时将原始数组的第⼀个值赋给它。
for (let i = 1; i < list.length; i++) {
// 判断结果数组中是否存在⼀样的值,若果没有的话则将数据存⼊结果数组中。
if (!(result.some(val => list[i] === val))) {
result.push(list[i]);
}
}
return result;
}
let arr = [1, 1, 'a', 'a', true, true, false, false, null, '', null, '', undefined, undefined];
distinct(arr); // [ 1, "a", true, false, null, "", undefined ]
⽅法三:双重for循环去重
双重for循环,第⼀层循环确保数组中的每⼀项都能被⽐较,第⼆层循环确保被⽐较项后的每⼀项都能跟被⽐较项⽐较。
function distinct2(list) {
for (let i = 0; i < list.length; i++) {
for (let j = i + 1; j < list.length; j++) {
// 后⾯数据的若跟前⼀项数据相同,则重复,需要去除。
if (list[i] === list[j]) {
list.splice(j, 1); // 去除后⾯的相同项
j--;
}
}
}
return list;
}
let arr = [1, 1, 'a', 'a', true, true, false, false, null, '', null, '', undefined, undefined];
distinct2(arr); // [ 1, "a", true, false, null, "", undefined ]
⽅法四:hasOwnProperty()⽅法去重
hasOwnProperty() ⽅法⽤来检测⼀个属性是否是对象的⾃有属性,⽽不是从原型链继承的。如果该属性是⾃有属性,那么返回 true,否则返回 false。
function unique(arr) {
var obj = {}; // ⽤来记录数组中的数据
return arr.filter(function(item, index, arr){
// 如果记录对象中存在某个数据,则返回false过滤掉;否则obj进⾏记录并筛选出来
return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)
})
}
let arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
unique(arr) // [ 1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, 'a', {}]
⽅法五:利⽤filter()+indexOf()⽅法去重
indexOf() ⽅法可返回某个指定的字符串值在字符串中⾸次出现的位置。
function unique(arr) {
return arr.filter(function(item, index, arr) {
// 从数组0位开始查,如果当前元素在原始数组中的第⼀个索引==当前索引值,说明它是第⼀次出现。
return arr.indexOf(item, 0) === index;
});
}
let list = [1, 1, 'a', 'a', true, true, false, false, null, '', null, '', undefined, undefined];
unique(list); // [ 1, "a", true, false, null, "", undefined ]
此外,数组去重还可以利⽤filter()、includes()等⽅法实现,但是思路都跟上⾯⼏种⽅法类似,这⾥就不⼀⼀列举了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论