Set
Set是es6新增的数据结构,似于数组,但它的一大特性就是所有元素都是唯一的,没有重复的值,我们一般称为集合
var arr =[1,1,2,2,3,4,5,5,6,7,8,9,9]
// 数组去重
function unique(arr){
// 使用展开运算符
return Array.from([...new Set(arr)])
// 使用Array.from
return Array.from(new Set(arr))
}
console.log(unique(arr))
// [1, 2, 3, 4, 5, 6, 7, 8, 9]
双重循环
splice(start,deleteCount,item…)
- 删除/添加元素
- 对原数组有影响
- 参数详解 :
- start 需要操作元素的起始位置
- deleteCount 需要删除元素的个数
- item 需要添加的元素
- 返回删除/添加操作之后的数组
- 原数组会去掉/添加 进行操作之后的数组
var arr = [1, 1, 1, 2, 3, 4, 4, 5, 6, true, true, false, 'true', 'true']
// 去重
function unique(arr) {
let length = arr.length
for (let i = 0; i < length; i++) {
for (let j = i + 1; j < length; j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1)
length--;
j--;
}
}
}
return arr
}
console.log(unique(arr))
// =============================================
const arr1 = [1, 1, 1, 2, 3, 4, 4, 5, 6, true, true, false, 'true', 'true']
const unique = arr => {
let length = arr.length
for (let i = 0; i < length; i++) {
for (let j = i + 1; j < length; j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1)
// 删除一个元素 需要修改长度和内循环的索引
j--
length--
}
}
}
return arr
}
console.log(unique(arr1)) // [ 1, 2, 3, 4, 5, 6, true, false, 'true']
indexOf
indexOf
- 返回查找到的第一个元素的索引号
- 如果没有查找到就返回 -1
- 从数组的开头(位置0)开始向后查找
var arr =[1,1,2,2,3,4,5,5,6,7,8,9,9]
// 去重
function unique(arr){
var newArr = []
for(let i = 0;i<arr.length;i++){
// 检查新数组里面是否存在旧数组里面的元素
if(newArr.indexOf(arr[i]) === -1){
// 不存在 就push进去
newArr.push(arr[i])
}
}
return newArr
}
console.log(unique(arr))
includes
includes
- 判断一个数组是否包含一个指定的值
- 如果包含则返回 true
- 否则返回false
var arr =[1,1,2,2,3,4,5,5,6,7,8,9,9]
// 去重
function unique(arr){
var newArr = []
for(let i = 0;i<arr.length;i++){
// 新数组里面的数据 不包括旧数组里面的数据
if(!newArr.includes(arr[i])){
// 不存在 就push进去
newArr.push(arr[i])
}
}
return newArr
}
console.log(unique(arr))
filter
var arr =[1,1,2,2,3,4,5,5,6,7,8,9,9]
// 去重
function unique(arr){
return arr.filter((item,index)=>{
return arr.indexOf(item) === index
})
}
console.log(unique(arr))