数组去重(配套使用)
1、利用set数据结构元素的唯一性配合扩展运算符或者Array.from()
let arr = [1,2,2,'a',3,'a',4]
//或者Array.from(new Set(arr))
let newArr = [...new Set(arr)]
console.log(newArr) // [1, 2, "a", 3, 4]
2、利用filter配合indexOf
let arr = [1,2,2,'a',3,'a',4]
// indexOf()返回元素首次出现的位置,找不到则为- 1
// 通过判断第一次出现的位置和原来的位置是否吻合
// 比如第二个2它的下标为2,但是第一次出现的下标为1,所以它不能加入数组
let newArr = arr.filter((item,index) => arr.indexOf(item) === index)
console.log(newArr) // [1, 2, "a", 3, 4]
3、利用reduce配合includes
let arr = [1,2,2,'a',3,'a',4]
let newArr = arr.reduce((array,cur) => array.includes(cur) ? array : [...array,cur], [] )
console.log(newArr) // [1, 2, "a", 3, 4]
Array.from()
作用:将伪数组(包含没有Iterator接口的伪数组)转为数组
//类数组对象 let obj = { '0': 'a', '1': 'b', '2': 'c', length: 3 } //无论伪数组有没有Iterator 接口,都可以转换 //不具有Iterator 接口的obj let arr = Array.from(obj) // ['a', 'b', 'c']
//具有 Iterator 接口的字符串和 Set 结构 Array.from('hello') // ['h', 'e', 'l', 'l', 'o']
let setobj = new Set(['a', 'b']) Array.from(setobj) // ['a', 'b']
**与扩展运算符的区别**
+ Array.from可以将伪数组(包含没有迭代器的类数组)转为数组
+ 扩展运算符对于没有部署Iterator接口的类似数组的对象,无法将其转为真正的数组。
```javaScript
let obj = {
'0': 'a',
'1': 'b',
'2': 'c',
length: 3
}
let arr = [...obj] // obj is not iterable
//给这个伪数组新增一个[Symbol.iterator]的迭代器
let arr = {
'0': 'a',
'1': 'b',
'2': 'c',
length: 3,
[Symbol.iterator]:function *() {
for(let i = 0;i < this.length;i++){
yield this[i]
}
}
}
let arr = [...obj] // ["a", "b", "c"]
Array.of()
返回由参数值组成的数组,如果没有参数,就返回一个空数组
Array.of() // []
Array.of(undefined) // [undefined]
Array.of(1) // [1]
Array.of(1, 2) // [1, 2]
数组实例的 find() 和 findIndex()
find():返回第一个符合条件的数组成员,没有则返回undefined
let arr = ['a','b','c','d']
let val = arr.find(item => item === 'a')
console.log(val) // a
findIndex():返回第一个符合条件的数组成员的下标,如果所有成员都不符合条件,则返回-1
let arr = ['a','b','c','d']
let val = arr.findIndex(item => item === 'a')
console.log(val) // 0
数组实例的 includes()
是否有其中一个值满足条件,如果是则返回true,如果不是则返回false
[1, 2, 3].includes(2) // true
[1, 2, NaN].includes(NaN) // true
数组实例的 filter()
创建一个符合条件新的数组
let arr = [1,2,3,4]
let newArr = arr.filter(item => item > 1)
console.log(newArr) // [2, 3, 4]