通过创建一个临时变量temp,用以存储不重复的元素。遍历待去重的数组,依次判断temp中是否存在此元素,不存在就将该元素放入temp。存在则跳过此元素。
function array_noRepeat(arr) {
let len = arr.length
if (!len) {
return []
}
let tmp = []
for (let i = 0; i < len; i++) {
// 判断数组arr的元素是否在数组tmp中
if (tmp.indexOf(arr[i]) === -1) {
tmp.push(arr[i])
}
}
return tmp
}
let arr = [1, 2, 3, '1', 2, undefined, undefined, 'undefined']
let newArr = array_noRepeat(arr)
console.log(newArr) // [1, 2, 3, '1', undefined, 'undefined']
此方法可以区分字符串和数字,区分 undefined 和 “undefined”,但是此种方法不能区分NaN。不考虑这些情况,还可以使用下面的方法(方法三):
function array_noRepeat(arr) {
if (arr.length === 0) {
return arr
}
let tmp = {}
let len = arr.length
for (let i = 0; i < len; i++) {
if (tmp[arr[i]] === undefined) {
tmp[arr[i]] = i
}
}
return Object.keys(tmp)
}
// 调用数组去重
let arr = [1, 2, 3, 1, 2]
let newArr = array_noRepeat(arr)
console.log(newArr) // ['1', '2', '3']
function array_noRepeat(arr) {
let len = arr.length
if (!len) {
return []
}
let tmp = []
for (let i = 0; i < len; i++) {
// 判断数组arr的元素是否在数组tmp中
if (!tmp.includes(arr[i]) {
tmp.push(arr[i])
}
}
return tmp
}
let arr = [1, 2, 3, '1', 2, undefined, undefined, 'undefined', NaN, NaN]
let newArr = array_noRepeat(arr)
console.log(newArr) // [1, 2, 3, '1', undefined, 'undefined', NaN]
此方法对数组中包含数字、字符串、undefined、NaN都可以达到效果,如若你的数组中包含对象呢?那就需要用到下面的方法:
function array_noRepeat(arr) {
let len = arr.length
if (!len) {
return []
}
let tmp = []
for (let i = 0; i < len; i++) {
// 判断数组arr的元素是否在数组tmp中
if (tmp.findIndex((v) => JSON.stringify(v) === JSON.stringify(arr[i])) === -1) {
tmp.push(arr[i])
}
}
return tmp
}
let arr = [1, 2, 3, '1', 2, undefined, undefined, 'undefined', NaN, NaN, {}, {}, {a: 1}, {a: 1}]
let newArr = array_noRepeat(arr)
console.log(newArr) // [1, 2, 3, '1', undefined, 'undefined', NaN, {}, {a: 1}]
let arr = [1, 2, 3, '1', 2, undefined, undefined, 'undefined']
let newArr = [...new Set(arr)]
console.log(newArr) // [1, 2, 3, "1", undefined, "undefined"]
以上方法均可以用于数组的去重操作,具体选用那种还需以实际情况决定,如有更好的方法,欢迎评论补充。
Tips:
如果本文章对您有帮助,欢迎评论告知!