数组
判断数组
js
// 1. isArray
const arr = [1, 2, 3]
console.log(Array.isArray(arr)) // true
// 2. instanceof
console.log(arr instanceof Array) // true
// 3. constructor
console.log(arr.constructor === Array) // true
// 4. Object.prototype.toString.call()
console.log(Object.prototype.toString.call(arr).indexOf('Array') !== -1) // true
// 5. Array.prototype.isPrototypeOf()
console.log(Array.prototype.isPrototypeOf(arr)) // true
slice和splice
slice
和splice
都是数组的方法,但是它们的作用不同。
slice
:返回一个新的数组,包含从开始到结束(不包括结束)的元素,原数组不会被修改。
js
const arr = [1, 2, 3, 4, 5]
const newArr = arr.slice(1, 3)
console.log(newArr) // [2, 3]
console.log(arr) // [1, 2, 3, 4, 5]
splice
:从数组中添加或删除元素,返回被删除的元素,原数组会被修改。
js
const arr = [1, 2, 3, 4, 5]
const newArr = arr.splice(1, 3)
console.log(newArr) // [2, 3, 4]
console.log(arr) // [1, 5]
数组去重
1. Set
js
const arr = [1, 2, 3, 4, 5, 1, 2, 3]
const newArr = [...new Set(arr)]
console.log(newArr) // [1, 2, 3, 4, 5]
2. filter
当arr中item第一次出现的位置等于index时,说明是第一次出现,则保留。
js
const arr = [1, 2, 3, 4, 5, 1, 2, 3]
const newArr = arr.filter((item, index) => arr.indexOf(item) === index)
console.log(newArr) // [1, 2, 3, 4, 5]
3. reduce
当prev中包含cur时,说明cur已经存在,不需要再添加,否则添加cur到prev中。
js
const arr = [1, 2, 3, 4, 5, 1, 2, 3]
const newArr = arr.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], [])
console.log(newArr) // [1, 2, 3, 4, 5]
数组扁平化
1. flat
flat() 方法会按照一个指定的深度递归遍历数组,然后将所有元素与遍历到的子数组中的元素合并为一个新数组返回。
js
const arr = [1, [2, 3], [4, [5, 6]]]
const newArr = arr.flat(Infinity)
console.log(newArr) // [1, 2, 3, 4, 5, 6]
2. reduce
判断cur是否为数组,是则递归调用flatten,否则直接添加到prev中。
js
const arr = [1, [2, 3], [4, [5, 6]]]
const flatten = arr => arr.reduce((prev, cur) => prev.concat(Array.isArray(cur) ? flatten(cur) : cur), [])
const newArr = flatten(arr)
console.log(newArr) // [1, 2, 3, 4, 5, 6]
数组乱序
js
const arr = [1, 2, 3, 4, 5]
const newArr = arr.sort(() => Math.random() - 0.5)
console.log(newArr)
some和every
some
:只要有一个元素满足条件,就返回true
,否则返回false
。every
:所有元素都满足条件,才返回true
,否则返回false
。
js
const arr = [1, 2, 3, 4, 5]
const some = arr.some(item => item > 3)
console.log(some) // true
const every = arr.every(item => item > 3)
console.log(every) // false