xszi / javascript-algorithms

算法修炼中...
5 stars 0 forks source link

数组方法 #21

Open xszi opened 4 years ago

xszi commented 4 years ago

对数组这块一些重要,还不怎么熟悉的API再过一遍。

xszi commented 4 years ago

一些数组方法记忆

  1. splice—— 在任意位置添加或删除元素
var numbers = [1, 5, 3, 4, 9, 7]
numbers.splice(3, 1, 2) 
console.log(numbers)
// 在索引为3的位置,删除一个数(此时为4),再添加一个数2
// 故结果为[1, 5, 3, 2, 9, 7]

不推荐使用delete删除数组元素,因为:

var numbers = [1, 5, 3, 4, 9, 7]
delete numbers[4]
console.log(numbers)
// 结果为[1, 5, 3, 2, empty, 7],依然占据位置
  1. everysome

    var isEven = (x) => {
       return (x % 2) === 0
    }
    
    var numbers1 = [1, 5, 3, 4, 9, 7]
    var numbers2 = [2, 4, 6, 8, 10]
    • 对数组中的每一项运行给定函数,如果每一项运行都返回true,则最后结果为true
    number1.every(isEven) // false
    number2.every(isEven) // true
    • 对数组中的每一项运行给定函数,只要有一项运行返回true,则最后结果为true
    number1.some(isEven) // true
    number2.some(isEven) // true
  2. reduce

    常用于数组元素求和,看一个题目:使用简单的数组操作方法将数组里面的大于0的数字求和。

    const arr = [1, 6, -1, 4, -3, 7, 8]
    const result = arr.filter(elem => elem > 0).reduce((pre, cur) => pre + cur, 0)
  3. for ... infor ... of

    for in遍历的是数组的索引(即键名),而for of遍历的是数组元素值。 所以for in更适合遍历对象,不要使用for in遍历数组。

  4. Array.from()Array.of()

    const numbers = [1, 5, 3, 4, 9, 7, 6]
    const evens = Array.from(numbers, x => (x % 2 === 0)) // [false, false, false, true, false, false, true]
    const numbers = Array.of(1, 2, 3)// [1, 2, 3] 类似于[...numbers1]
  5. fill

    let numbers = Array.of(1, 2, 3, 4, 5, 6)
    numbers.fill(0)
    console.log(numbers)// [0, 0, 0, 0, 0, 0]
    numbers.fill(2, 1) //// [0, 2, 2, 2, 2, 2]
    numbers.fill(1, 3, 5) //// [0, 2, 2, 1, 1, 2]
  6. copyWithin

    let numbers = Array.of(1, 2, 3, 4, 5, 6)
    numbers.copyWithin(0, 3) // [4, 5, 6, 4, 5, 6]
    numbers.copyWithin(1, 3, 5) // [4, 4,5, 4, 5, 6]
  7. findfindIndex

    • find返回第一个满足条件的值

    • findIndex 返回第一个满足条件的值得索引