数组去重
1.for循环方法
console.log("数组去重----------------------------");
var a = [1, 2, 4, 5, 2, 1, 3, 3, 3, 1, 1, "hi", "hi"];
function arr(a) {
for (i = 0; i < a.length; i++) {
for (j = i + 1; j < a.length; j++) {
//判断是否有相等元素
if (a[i] == a[j]) {
//有相等元素则将后面的元素前移一位,覆盖掉j位置元素
for (k = j; k < a.length; k++) {
a[k] = a[k + 1];
}
a.length--;
//若出现了相等的元素,则i位置的元素还需要和后面剩余的元素作比较
j--;
}
}
}
return a;
}
console.log(arr(a));
2.indexof和lastIndexof方法(一个从前向后,一个从后向前)
indexOf() 方法可返回数组中某个指定的元素位置。
该方法将从头到尾地检索数组,看它是否含有对应的元素。开始检索的位置在数组 start 处或数组的开头(没有指定 start 参数时)。如果找到一个 item,则返回 item 的第一次出现的位置。开始位置的索引为 0。
lastIndexOf() 方法可返回一个指定的元素在数组中最后出现的位置,从该字符串的后面向前查找。
该方法将从尾到头地检索数组中指定元素 item。开始检索的位置在数组的 start 处或数组的结尾(没有指定 start 参数时)。如果找到一个 item,则返回 item 从尾向前检索第一个次出现在数组的位置。数组的索引开始位置是从 0 开始的。
如果要检索的元素没有出现,则该方法返回 -1。
var arr = [1, 2, 3, 3, 2, "hello", "hello"];
function unique(arr) {
let newArr = [];
for (let i = 0; i < arr.length; i++) {
//判断new数组中是否含有arr数组中的元素
if (newArr.indexOf(arr[i]) === -1) {
//如果没有则放入new数组中
newArr.push(arr[i]);
}
}
return newArr;
}
console.log(unique(arr));
4.includes方法
参数:第一个参数查找的数组元素,第二个参数表示判断的起始位置返回值:false/true
var arr = [1, 2, 3, 4];
console.log(arr.includes(6));
var arr = [1, 2, 3, 3, 2, "hello", "hello"];
function unique(arr) {
let newArr = [];
for (let i = 0; i < arr.length; i++) {
if (!newArr.includes(arr[i])) {
newArr.push(arr[i]);
}
}
return newArr;
}
console.log(unique(arr));
5.forEach+indexof方法
forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。
注意: forEach() 对于空数组是不会执行回调函数的。
var arr = [1, 2, 3, 3, 2, "hello", "hello"];
function unique(arr) {
let newArr = [];
arr.forEach(function (item) {
if (newArr.indexOf(item) === -1) {
newArr.push(item);
}
});
return newArr;
}
console.log(unique(arr));
6.filter+indexOf/includes方法
filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
注意: filter() 不会对空数组进行检测,不会改变原始数组
var arr = [1, 2, 3, 3, 2, "hello", "hello"];
function unique(arr) {
let newArr = [];
return arr.filter(function (item) {
return newArr.includes(item) ? "" : newArr.push(item);
});
}
console.log(unique(arr));
7.利用Set构造方法去重
Set构造方法(ES6),类似于数组,set中不允许重复。
几种常用方法:
1、add():用于数据的添加。
2、delete():用于数据的删除。
3、size():用于计算set对象的大小(相当于数组的长度)。
4、clear():清空数据。
5、has():用于寻找set对象中是否存在某个值。
var arr = [1, 2, 3, 3, 2, "hello", "hello"];
let set = new Set(arr);
console.log(set.add("world"));
console.log(set.delete("world"));
console.log(set.size);
console.log(set.has(1));
var arr = [1, 2, 3, 3, 2, "hello", "hello"];
let set = new Set(arr);
//原因:set方法自动去重
console.log(set, typeof set);
//将数组对象转换成数组
console.log(Array.from(set));
// console.log([...set]);