Skip to content

数组

判断数组

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

slicesplice都是数组的方法,但是它们的作用不同。

  • 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

Released under the MIT License.