数组对象去重完毕了,也看看数组去重吧。
一、第一种方法
- 使用 indexOf()和 push() 进行数组去重。
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。
如果没有找到匹配的字符串则返回 -1。
注意: indexOf() 方法区分大小写。
var arr = [3,3,undefined,undefined,null,null,NaN,NaN,{},{},true,true,'false','false'];
function unique(arr) {
if (!Array.isArray(arr)) { //判断是否是数组
console.log('不是数组!')
return;
}
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i]) === -1) {
newArr.push(arr[i]);
}
}
return newArr;
}
var demo = unique(arr);
console.log("去重后的数组", demo);
//去重后的数组 (9) [3, undefined, null, NaN, NaN, {…}, {…}, true, "false"]
- NaN与{}没有被去重
二、第二种方法
- 使用 sort()和 push() 进行数组去重。
sort() 方法用于对数组的元素进行排序(升、降)。
sort() 默认排序顺序为按字母升序。
注:默认字母排序时:40(fourty)在5(five)前。
var arr = [3, 3, undefined, undefined, null, null, NaN, NaN, {}, {}, true, true, 'false', 'false'];
function unique(arr) {
arr = arr.sort();
//排序后的数组 (14) [3, 3, NaN, NaN, {…}, {…}, "false", "false", null, null, true, true, undefined, undefined]
var arrry = [arr[0]];
for (var i = 1; i < arr.length; i++) {
if (arr[i] !== arr[i - 1]) {
arrry.push(arr[i]);
}
}
return arrry;
}
console.log("去重后的数组", (unique(arr)));
//去重后的数组 (9) [3, NaN, NaN, {…}, {…}, "false", null, true, undefined]
- NaN与{}没有被去重
三、第三种方法
- 使用 includes()进行数组去重。
includes() 方法用于判断字符串是否包含指定的子字符串。
如果找到匹配的字符串则返回 true,否则返回 false。
includes() 方法区分大小写。
语法: str.includes(searchValue,start)
searchValue:要查找的字符串。start:开始的索引位置(可不写)。
var arr = [3, 3, undefined, undefined, null, null, NaN, NaN, {}, {}, true, true, 'false', 'false'];
function unique(arr) {
var array = [];
for (var i = 0; i < arr.length; i++) {
if (!array.includes(arr[i])) { //includes 检测数组是否有某个值
array.push(arr[i]);
}
}
return array
}
console.log("去重后的数组", (unique(arr)));
//去重后的数组 (8) [3, undefined, null, NaN, {…}, {…}, true, "false"]
- {}没有被去重
四、第四种方法
- 使用 filter()进行数组去重。
意如其名,过滤。
filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
filter() 不会对空数组进行检测。不会改变原始数组。
array.filter(function(currentValue,index,arr), thisValue)
currentValue | 当前元素值(必) |
---|---|
index | 当前元素索引值(可) |
arr | 当前元素属于的数组对象(可) |
thisValue | 对象作为该执行回调时使用,传递给函数,用作 “this” 的值。(可) |
var arr = [3, 3, undefined, undefined, null, null, NaN, NaN, {}, {}, true, true, 'false', 'false'];
function unique(arr) {
return arr.filter(function(currentValue,index,arr){
return arr.indexOf(currentValue, 0) === index;
});
}
console.log("去重后的数组", (unique(arr)));
//去重后的数组 (7) [3, undefined, null, {…}, {…}, true, "false"]
- {}没有被去重;NaN被过滤消失
五、第五种方法
- 使用 ES6的 Set()进行数组去重。
new Set(数组):数组转Set。
Set 对象存储的值总是唯一的,所以需要判断两个值是否恒等。
Array.from(object, mapFunction, thisValue)
object:要转换为数组的对象。(必)
var arr = [3, 3, undefined, undefined, null, null, NaN, NaN, {}, {}, true, true, 'false', 'false'];
//先放进Set让值唯一,再转换回数组格式
function unique (arr) {
return Array.from(new Set(arr))
}
console.log("去重后的数组", (unique(arr)));
//去重后的数组 (8) [3, undefined, null, NaN, {…}, {…}, true, "false"]
- {}没有被去重
六、总结
这些主要是我再熟悉使用javascript的方法。
参考指路:大佬版12种方法的javaScript数组去重
参考指路: javascripy菜鸟教程
- 数组与字符串的相互转换:指路—>数组、字符串的相互转换!那可是真必备
- 删除替换数组特定值:指路—>删除、替换 数组 特定值!
- 数组对象去重:指路—>数组对象去重!必备
- 数组去重的5种方法:指路—>数组去重的5种方法 也赶来了!
- javascript菜鸟教程:指路—>JavaScript 教程