ECMAScript 2023

  1. 从尾到头搜索数组
    在 JavaScript 中,通过 find() 和 findIndex() 查找数组中的值是一种常见做法。不过,这些方法从数组的开始进行遍历:
    const array = [{v: 1}, {v: 2}, {v: 3}, {v: 4}, {v: 5}];
    
    array.find(elem => elem.v > 3); // {v: 4}
    array.findIndex(elem => elem.v > 3); // 3
    findLast() 会返回第一个查找到的元素,如果没有找到,就会返回 undefined;
    findLastIndex() 会返回第一个查找到的元素的索引。如果没有找到,就会返回 -1;
     const array = [{v: 1}, {v: 2}, {v: 3}, {v: 4}, {v: 5}];
    
     array.findLast(elem => elem.v > 3); // {v: 5}
     array.findLastIndex(elem => elem.v > 3); // 4
     array.findLastIndex(elem => elem.v > 5); // undefined
  2. 通过副本更改数组
    方法有4个
    Array.prototype.toReversed()
    Array.prototype.toSorted()
    Array.prototype.toSpliced()
    Array.prototype.with()

    我们知道,大多数的数组方法都是非破坏性的,也就是不会改变原数组,比如 filter() 方法
    当然,也有一些是破坏性的方法,它们在执行时会改变原数组,比如 sort() 方法
    在数组的方法中,下面的方法是具有破坏性的:
    reverse()
    sort()
    splice()

    如果想要不破坏数组,需要创建一个数组副本,对副本进行修改,因此就引入了这三个方法的非破坏性版本,因此不需要手动创建副本再进行操作了

    reverse() 的非破坏性版本:toReversed()
    sort() 非破坏性版本:toSorted(compareFn)
    splice() 非破坏性版本:toSpliced(start, deleteCount, ...items)

    除此之外,还有了一个新的非破坏性方法:with()。该方法会以非破坏性的方式替换给定 index 处的数组元素,即 arr[index]=value 的非破坏性版本。
     

    类型化数组也是数组,只不过其元素被设置为特定类型的值。类型化数组的核心就是一个名为 ArrayBuffer 的类型。每个 ArrayBuffer 对象表示的只是内存中指定的字节数,但不会指定这些字节用于保存什么类型的数据。通过 ArrayBuffer 能做的就是为了将来使用而分配一定数量的字节。
    这些方法也适用于元组,元组相当于不可变的数组。它们拥有数组的所有方法 —— 除了破坏性的方法
    toReversed() 是 reverse() 方法的非破坏性版本:

    const arr = ['a', 'b', 'c'];
    const result = arr.toReversed();
    console.log(result); // ['c', 'b', 'a']
    console.log(arr);    // ['a', 'b', 'c']

    toSorted() 是 sort() 方法的非破坏性版本:

    const arr = ['c', 'a', 'b'];
    const result = arr.toSorted();
    console.log(result);  // ['a', 'b', 'c']
    console.log(arr);     // ['c', 'a', 'b']

    splice() 方法比其他几种方法都复杂,其使用形式:splice(start, deleteCount, ...items)。该方法会从从 start 索引处开始删除 deleteCount 个元素,然后在 start 索引处开始插入 item 中的元素,最后返回已经删除的元素。
    toSpliced 是 splice() 方法的非破坏性版本,它会返回更新后的数组,原数组不会变化,并且无法再得到已经删除的元素:

    const arr = ['a', 'b', 'c', 'd'];
    const result = arr.toSpliced(1, 2, 'X');
    console.log(result); // ['a', 'X', 'd']
    console.log(arr);    // ['a', 'b', 'c', 'd']

    .with() 方法的使用形式:.with(index, value),它是 arr[index] = value 的非破坏性版本:

    const arr = ['a', 'b', 'c'];
    const result = arr.with(1, 'X');
    console.log(result);  // ['a', 'X', 'c']
    console.log(arr);     // ['a', 'b', 'c']

你可能感兴趣的:(个人总结,转载,ecmascript,前端,开发语言,javascript,js)