一、使用 indexOf 方法
indexOf()方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。
1、方法一:
let arr1 = [1,2,1,3,1,5,2,3,6,4,1,2,5,3]
let arr2 = []
for(let i = 0; i < arr1.length ; i++) {
//通过indexOf判断arr1中当前元素的位置是否与index相等
if(arr1.indexOf(arr1[i]) === i){
arr2.push(arr1[i])
}
}
2、方法二:
let arr = [1,2,1,3,1,5,2,3,6,4,1,2,5,3]
function uniq(arr) {
let arr2 = []
for (let i = 0 ; i < arr.length ; i++){
//判断arr2中是否有当前元素
if(arr2.indexOf(arr[i]) === -1) {
arr2.push(arr[i])
}
}
return arr2
}
uniq(arr)
二、使用内置 Array.prototype.filter() 方法
filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。如果没有任何数组元素通过测试,则返回空数组。
let arr = [1,2,1,3,1,5,2,3,6,4,1,2,5,3]
let arr2 = arr.filter((element ,index , self) => {
return self.indexOf(element) === index
})
console.log(arr2)
三、使用内置 Array.prototype.includes() 方法
includes() 方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回false。对象数组不能使用includes方法来检测。
第一个参数:要搜索的内容
第二个参数:开始位置(大于数组长度时,整个数组不会被搜索,索引位置小于0时,数组每一项都会被搜索)
console.log([1, 2, 3].includes(2)); // true
console.log([1, 2, 3].includes(4)); // false
console.log([1, 2, 3].includes(3, 3)); // false
console.log([1, 2, 3].includes(3, 0)); // true
console.log([1, 2, NaN].includes(NaN)); // true
function uniq(arry){
var result = [];
for(var i =0; i < arry.length; i++) {
if(!result.includes(arry[i])) {
//如 result 中没有 arry[i],则添加到数组中
result.push(arry[i])
}
}
return console.log(result);
}
uniq([1,2,1,3,1,5,2,3,6,4,1,2,5,3])
四、ES6-Set方法
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set函数可以接受一个数组作为参数,用来初始化。
// 例一
const set = new Set([1, 2, 3, 4, 4]);
[...set]
// [1, 2, 3, 4]
// 例二
const items = new Set([1, 2, 3, 4, 5, 5, 5, 5]);
items.size // 5
let arr = [1,2,1,3,1,5,2,3,6,4,1,2,5,3]
function uniq(ar) {
return [...new Set(ar)]
}
uniq(arr)
网友评论