一、结合 includes() 输出的还是数组
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>数组去重</title>
</head>
<body>
<script>
let arr = [1, 1, 2, 3]
function unique(arr) {
// 1.判断传进来的是不是数组
if (!Array.isArray(arr)) {
console.log('传进来的不是数组');
}
//2.定义一个新的空数组,方便提取出去重后的数组
let newArr = [6, 8]
// 3.定义循环下标
for (let i = 0; i < arr.length; i++) {
//4. 判断 新的空数组 是否包含了 旧数组的某一项,不包含就把这一项添加到新数组
if (!newArr.includes(arr[i])) {
newArr.push(arr[i])
}
}
// 5.同层 把定义的变量 return 出去
return newArr
}
console.log(unique(arr)); //(5) [3, 2, 1, 6, 8] 输出的还是数组
document.writeln(unique(arr)) //1,2,3
</script>
</body>
</html>
二、结合 find(), 输出的还是数组
<script>
let arr = [1, 2, 3, 1, 2]
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('传进来的不是数组');
return
}
var arr2 = []
for (let i = 0; i < arr.length; i++) {
//find()传入一个回调函数,在回调函数里面把传入的每一项拿到, 找符合条件的第一项,如果符合就返回
if (!arr2.find(function (v) {
// console.log(v);
return v == arr[i] //v 传过来的
})) {
arr2.push(arr[i])
}
}
return arr2
}
console.log(unique(arr));//(3) [1, 2, 3]
</script>
箭头函数写
let arr = [1, 2, 3, 1, 2]
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('传进来的不是数组');
}
let newArr = []
for (let i = 0; i < arr.length; i++) {
if (!newArr.find((v) => {
return v == arr[i]
})) {
newArr.push(arr[i])
}
}
return newArr
}
console.log(unique(arr)); //(3) [1, 2, 3]
三、结合 findIndex(), 输出的还是数组
<script>
let arr = [1, 1, 2, 3]
function unique(arr) {
var arr3 = []
if (!Array.isArray(arr)) {
console.log('抱歉,传入的不是数组');
}
for (let i = 0; i < arr.length; i++) {
if (arr3.findIndex(function (v) {
return v == arr[i]
}) == -1) {
arr3.push(arr[i])
}
}
return arr3
}
console.log(unique(arr));//(3) [1, 2, 3]
</script>
四、es6 Set() 去重后,不是数组类型
<script>
let arr = [1, 2, 3, 1, 2]
const newArr = new Set(arr)
console.log(newArr); //Set(3) {1, 2, 3} 去重后,不是数组类型
document.writeln(newArr) //[object Set]
</script>
找到 方法了:
获取唯一值数组可能比想象的要容易:
var j = [...new Set([1, 2, 3, 3])]
>> [1, 2, 3]