例如: 可以手写排序算法先将数组进行排序, 也可以使用数组方法 sort() 对数组进行排序, 之后相邻两两进行判断是否重复, 重复即使用数组方法 splice() 进行去重
var arr1 = [1, 2, 3, 1, 9, 6, 4, 5, 7, 1, 4, 5, 6];
console.log("原数组: ", arr1)
arr1.sort(function (a, b) {
return a - b
})
console.log("排序后: ", arr1)
for (var i = 0; i < arr1.length - 1; i++) {
if (arr1[i] == arr1[i + 1]) {
arr1.splice(i, 1);
i--;
}
}
console.log("去重后: ", arr1)
例如: 建一个新数组, 遍历原数组(需要去重的数组), 在循环中新数组调用 indexOf() 查找新数组中是否存在原数组的该元素, 若返回值为 -1, 即将该元素添加到新数组, 最后新数组即为去重后的数组
var arr2 = [1, 2, 3, 1, 9, 6, 4, 5, 7, 1, 4, 5, 6]
var arr22 = []
for (var i = 0; i < arr2.length; i++) {
if (arr22.indexOf(arr2[i]) == -1) {
arr22.push(arr2[i])
}
}
console.log("去重后: ", arr22)
例如: 遍历数组, 遍历次数为数组长度-1, 从下标 0 的位置开始, 调用方法 indexOf() 判断该元素是否重复, 重复复及去除该元素(数组将塌陷一个单位), 循环索引-1, 重复判断该下标位置直至该下标位置不存在重复项, 才进入下一个位置循环, 直至数组去重完成
var arr3 = [1, 2, 3, 1, 9, 6, 4, 5, 7, 1, 4, 5, 6]
for (var i = 0; i < arr3.length - 1; i++) {
var index = arr3.indexOf(arr3[i], i + 1) // -1 或者 对应下标
if (index != -1) {
arr3.splice(index, 1); // 重复位置删除
i--;
}
}
console.log("去重后: ", arr3)
例如: 避免了数组塌陷, 采用循环嵌套的方式, 找出重复元素并删除, 直至无重复元素
var arr4 = [1, 2, 3, 1, 9, 6, 4, 5, 7, 1, 4, 5, 6]
for (var i = 0; i < arr4.length; i++) {
var index = arr4.indexOf(arr4[i], i + 1);
while (index != -1) {
arr4.splice(index, 1)
index = arr4.indexOf(arr4[i], i + 1) // 注意 index 的值变化
}
}
console.log("去重后: ", arr4)
原理: 对象的 key 唯一, 且可以为 number 类型
例如: 准备一个空对象和空数组, 遍历需去重数组, 将数组元素以对象的 key 的形式’存储’下来, 然后遍历(for…in…)对象, 将对象的 key 添加到数组, 从而实现数组去重
var arr5 = [1, 2, 3, 1, 9, 6, 4, 5, 7, 1, 4, 5, 6]
var obj = {};
var arr55 = [];
for (var i = 0; i < arr5.length; i++) {
obj[arr5[i]] = " "; // 将 数组元素的值 以对象obj的 键 存储
}
for (var key in obj) {
arr55.push(key - 0) // 注意数据类型
}
console.log("去重后: ", arr55)
【注】 此方法对纯数字数组较友好, 其他类型不太友好, 并且需要注意数据类型, 对象的 key 为string类型
原理: Set 类型的变量不接受重复数据
例如: 将需去重的数组转为 Set 数据类型, 该过程即完成去重操作, 在转为数组即可完成数组去重
var arr6 = [1, 2, 3, 1, 9, 6, 4, 5, 7, 1, 4, 5, 6]
var s = new Set(arr6) // 转为 Set 数据类型, 自然去重
console.log(s)
arr6.splice(0, arr6.length) // 将原数组变为空数组
// 方法1-还原成数组
arr6 = Array.from(s) // 将 Set 数据类型还原成数组
console.log("去重后-1: ", arr6)
// 方法2-还原成数组
arr6 = [...s]
console.log("去重后-2: ", arr6)