第一种
- 编写一个函数, 为传入的数组去除重复的项, 返回新数组
- indexOf方法以判断数组中是否包含某个元素,如果包含,就返回这个元素 - 第一次出现的索引位置,如果没有包含,就返回-1
所以:我们可以使用indexOf方法进行判断,如果判断结果为-1,说明这个值在新数组中没有存在,那么添加到新数组
function removeDup(arr) {
let newArr = []
// 遍历原数组
for (let i = 0; i < arr.length; i++) {
// -1说明新数组中没有当前遍历到的元素
if (newArr.indexOf(arr[i]) == -1) {
// 将这个元素添加到新数组
newArr.push(arr[i])
}
}
return newArr
}
let arr = [12, 34, 12, 53, 456, 34, 12, 6, 435, 34, 6, 12]
console.log(removeDup(arr));
第二种
- includes 不包含 返回 false
function removeDup(arr) {
let newArr = []
// 遍历原数组
for (let i = 0; i < arr.length; i++) {
if (!newArr.includes(arr[i])) {
// 将这个元素添加到新数组
newArr.push(arr[i])
}
}
return newArr
}
let arr = [12, 34, 12, 53, 456, 34, 12, 6, 435, 34, 6, 12]
console.log(removeDup(arr));
第三种
- splice(起始索引,删除的数量)
起始索引:从0开始
删除的数量:可以指定数量,如果没有指定,则删除从索引位置开始一直到最后的所有元素(如果指定的数量大于剩余的元素数量,不会报错,只会删除剩余的)
function removeDup(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[j] == arr[i]) {
arr.splice(j, 1)
j--
}
}
}
return arr
}
let arr = [12, 34, 12, 53, 456, 34, 12, 6, 435, 34, 6, 12]
document.write('arr:' + '[' + removeDup(arr) + ']')
第四种
function arr(array) {
return Array.from(new Set(array));
}
document.write('arr:' + '[' + arr([1,1,1,2,3,4]) + ']')
第五种
- ES6中使用Set数据结构将对象数组去重
- Set数据结构并非真正的数组,它类似于数组,并且成员值都是唯一的,没有重复,所以可以用来做去重操作。但是因为它是一个类似数组结构,所以需要转型为真正的数组去使用
console.log([...new Set([1,1,1,2,3,4])])