数组去重、排序、扁平化
1. 数组去重
1-1 双层 for 循环
- 定义一个新数组,并存放原数组的第一个元素
- 遍历原始数组,将原始数组中的每个元素与新数组中的每个元素进行比对
- 如果不重复则添加到新数组中,重复则不添加,最后返回新数组
// 双重for循环去重
// 通过原始数组与新数组中元素对比来去重
function unique(arr) {
// 判断是否为数组
if (!Array.isArray(arr)) {
console.log('type error!')
return
}
// 定义新数组 新数组第一个元素为元素数组第一个元素
let newArr = [arr[0]]
for (let i = 0; i < arr.length; i++) {
console.log(arr[i])
let repeat = false;
for (let j = 0; j < newArr.length; j++) {
console.log(newArr[j])
// 判断如果元素相同则返回true然后继续迭代
if (arr[i] === newArr[j]) {
repeat = true;
break;
}
}
// repeat为false时 arr[i]与newArr[j]不相等时添加新元素
if (!repeat) {
console.log(newArr)
newArr.push(arr[i])
console.log(newArr)
}
}
// 执行完返回新数组
return newArr;
}
let arr = [1, 1, 2, 7, 7]
console.log(unique(arr))
1-2 indexOf 去重
数组的 indexOf()
方法可返回某个指定的元素在数组中首次出现的位置
- 首先定义一个空数组
newArr
,然后调用indexOf
方法对原来的数组进行遍历判断 - 如果元素不在新数组中,则将其
push
进新数组中,最后将新数组返回即可获得去重的数组
// 通过indexof获取元素首次出现的位置
function unique(arr) {
// 判断是否为数组
if (!Array.isArray(arr)) {
console.log('type error!')
return
}
// 定义新数组
let newArr = [];
for (let i = 0; i < arr.length; i++) {
console.log(arr[i])
console.log(newArr.indexOf(arr[i]) === -1)
// 如果新数组有相同的元素则不添加
if (newArr.indexOf(arr[i]) === -1) {
newArr.push(arr[i])
console.log(newArr)
}
}
// 返回新数组
return newArr
}
let arr = [4, 4, 5, 5, 7]
console.log(unique(arr))
1-3 includes方法
数组的 includes()
方法可判断数组中是否含有此元素
- 首先定义一个空数组
newArr
,然后调用includes
方法对原来的数组进行遍历判断 - 如果元素不在新数组中,则将其
push
进新数组中,最后将新数组返回即可获得去重的数组
// 通过includes判断数组是否含有此元素
function unique(arr) {
// 判断是否为数组
if (!Array.isArray(arr)) {
console.log('type error!')
return
}
// 定义新数组
let newArr = [];
for (let i = 0; i < arr.length; i++) {
console.log(arr[i])
console.log(newArr.indexOf(arr[i]) === -1)
// 如果新数组有相同的元素则不添加
if (!newArr.includes(arr[i])) {
newArr.push(arr[i])
console.log(newArr)
}
}
// 返回新数组
return newArr
}
let arr = [4, 4, 5, 5, 7]
console.log(unique(arr))
1-4 fileter + indexOf
利用 indexOf
检测元素在数组中第一次出现的位置是否和元素现在的位置相等,如果不等则说明该元素是重复元素
// filter 对数组进行迭代过滤
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('type error!')
return
}
// 通过Array原型方法返回一个新数组
return Array.prototype.filter.call(arr, function(item, index) {
// 判断如果当前元素不等于当前索引则为重复元素
// 则返回索引与元素相符合的元素组成的新数组
return arr.indexOf(item) === index;
})
}
let arr = [2, 2, 4, 5, 7];
console.log(unique(arr));
1-5 相邻元素去重
- 通过
sort()
方法先对数组进行排序,创建一个新数组 - 然后根据排序后的结果进行遍历及相邻元素比对,如果相等则跳过该元素,不相等则添加到新数组
// 通过sort()对元素数组排序对相邻的元素进行对比
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('type error!')
return
}
arr = arr.sort();
let newArr = [];
for (let i = 0; i < arr.length; i++) {
// 判断相邻的元素是否相同
console.