数组的去重
1.利用indexOf
let arr = [1,2,1,2,4,7,5,9,0,4,4,7,7]
function removeR(arr) {
//创建新数组来接收去重后的元素
let newArry = []
for (let i = 0; i < arr.length; i++) {
//判断新数组中是否存在当前元素
//indexOf() 如果在数组中没找到指定元素则返回 -1
if (newArry.indexOf(arr[i]) === -1) {
//不存在,则将元素添加到新数组中
newArry.push(arr[i])
}
}
return newArry
}
arr = removeR(arr)
console.log(arr)
2.利用双重for循环
let arr = [1, 2, 1, 2, 4, 7, 5, 9, 0, 4, 4, 7, 7]
function removeR(arr) {
for (var i = 0; i < arr.length; i++) {
for (var j = i + 1; j < arr.length; j++) {
//判断元素是否相等
if (arr[i] == arr[j]) {
//相等,则将当前元素删除
arr.splice(j, 1);
//防止数组塌陷
//当前元素被删除时,下一个元素会替代上一个元素(即元素的索引发生改变)
j--;
}
}
}
return arr;
}
arr = removeR(arr)
console.log(arr);
数组塌陷:
在对数组进行操作的时候,会使数组的长度产生变化,同时操作的数组那个项的下一个索引会被跳过,从而造成数组的某项会被跳过。
3.利用Es6中的Set
let arr = [1, 2, 1, 2, 4, 7, 5, 9, 0, 4, 4, 7, 7]
function removeR(arr) {
//Array.from()将类数组转为数组
//Set是ES6新的数据结构,类似数组,但成员的值是唯一的,没有重复的值。
return Array.from(new Set(arr))
}
arr = removeR(arr)
console.log(arr);
也可以利用扩展运算符:
let arr = [1, 2, 1, 2, 4, 7, 5, 9, 0, 4, 4, 7, 7]
arr = [...new Set(arr)]
console.log(arr);