成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

我們一起倆聊聊使用 Array.prototype.with 更新不可變數組

開發 前端
使用本文介紹的四種方法之一可以在 JavaScript 中更輕松地實現不可變更新。具體來說, .with() 方法可以更輕松地更新數組的單個元素,而無需更改原始數組。

慶祝:此功能現已在所有三個主要瀏覽器引擎中可用!

瀏覽器最近獲得了一種新的可互操作方法,您可以在數組上調用它:Array.prototype.with() 。

Browser Support 瀏覽器支持:

  • chrome 110
  • Edge 110
  • firefox 115
  • Safari 16

本文探討了此方法的工作原理以及如何使用它來更新數組而不改變原始數組。

Array.prototype.with(index, value) 簡介

Array.prototype.with(index, value) 方法返回所調用的數組的副本,并將 index 設置為您提供的新 value 。

以下示例顯示年齡數組。您想要創建數組的新副本,同時將第二個年齡從 15 更改為 16:

const ages = [10, 15, 20, 25];

const newAges = ages.with(1, 16);
console.log(newAges); // [10, 16, 20, 25]
console.log(ages); // [10, 15, 20, 25] (unchanged)

分解代碼:ages.with(...) 返回 ages 變量的副本,而不修改原始數組。ages.with(1, …) 替換第二項 ( index = 1 )。ages.with(1, 16) 將第二個項目分配給 16 。

這就是你如何通過修改來創建一個新的數組副本。

當您想要確保原始數組保持不變時,這非常有用,本文介紹了這方面的一些用例。但是,現在看看如果使用括號表示法會發生什么:

const ages = [10, 15, 20, 25];

const newAges = ages;
newAges[1] = 16;
console.log(newAges); // [10, 16, 20, 25]
console.log(ages); // [10, 16, 20, 25] (Also changed ??)

正如您所看到的,在此示例中還修改了 ages 變量。這是因為當您分配 ages = newAges 時,JavaScript 不會復制該數組,而是創建對另一個數組的引用。因此,其中一個的任何更改也會影響另一個,因為它們都指向同一個數組。

Array.prototype.with() 和不變性

不變性是許多前端庫和框架的核心,僅舉幾例:React(和 redux)和 Vue

此外,其他庫和框架不一定需要不變性,但鼓勵它以獲得更好的性能:Angular 和 Lit

因此,開發人員經常不得不使用其他返回數組副本的方法,從而犧牲了代碼的可讀性:

const ages = [10, 15, 20, 25];

const newAges = ages.map((age, index) => {
    if (index === 1) {
         return 16;
    }
    return age;
});

console.log(newAges); // [10, 16, 20, 25]
console.log(ages); // [10, 15, 20, 25] (Remains unchanged)

下面是一個 Codepen 示例,說明了如何在 React 中結合 useState 使用 .with() 來永久更新項目數組:

import React, {useState} from 'https://esm.sh/react@18.2.0'
import ReactDOM from 'https://esm.sh/react-dom@18.2.0'


function App() {
    const [items, setItems] = useState(["Item 1", "Item 2", "Item 3"]);

    const updateItem = (index) => {
        // Immutable update
        setItems(items.with(index, `Updated item ${index + 1}`));
    };

    return (
        <ul>
            {items.map((item, index) => (
                <li key={index} className="item">
                    <button onClick={() => updateItem(index)}>Update</button>
                    <span>{item}</span>
                </li>
            ))}
        </ul>
    );
}

ReactDOM.render(<App />,
document.getElementById("root"))

由于 .with() 方法返回數組的副本,因此您可以鏈接多個 .with() 調用甚至其他數組方法。以下示例演示了從數組中遞增第二個和第三個年齡:

const ages = [10, 15, 20, 25];

const newAges = ages.with(1, ages[1] + 1).with(2, ages[2] + 1)

console.log(newAges); // [10, 16, 21, 25]
console.log(ages); // [10, 15, 20, 25] (unchanged)

其他新的不可變方法

其他三種方法最近也實現了互操作:

  • Array.prototype.toReversed() 反轉數組而不改變原始數組。
  • Array.prototype.toSorted() 對數組進行排序而不改變原始數組。
  • Array.prototype.toSpliced() 其工作方式類似于 .splice() 但不會改變原始數組。

根據 MDN 的說法,這三種方法是其對應方法的復制版本。這些方法也可以用在期望或首選不變性的地方。

總之,使用本文介紹的四種方法之一可以在 JavaScript 中更輕松地實現不可變更新。具體來說, .with() 方法可以更輕松地更新數組的單個元素,而無需更改原始數組。

原文:https://web.developers.google.cn/blog/array-with?hl=en

責任編輯:武曉燕 來源: 獨立開發者張張
相關推薦

2025-02-08 13:23:27

JavaScript開發喚醒鎖

2022-08-01 07:57:03

數組操作內存

2024-02-20 21:34:16

循環GolangGo

2021-08-27 07:06:10

IOJava抽象

2023-08-10 08:28:46

網絡編程通信

2023-08-04 08:20:56

DockerfileDocker工具

2023-06-30 08:18:51

敏捷開發模式

2022-05-24 08:21:16

數據安全API

2023-09-10 21:42:31

2024-03-15 08:27:20

2022-10-28 07:27:17

Netty異步Future

2022-11-12 12:33:38

CSS預處理器Sass

2022-02-14 07:03:31

網站安全MFA

2022-01-04 12:08:46

設計接口

2022-06-26 09:40:55

Django框架服務

2023-04-26 07:30:00

promptUI非結構化

2022-04-06 08:23:57

指針函數代碼

2023-12-28 09:55:08

隊列數據結構存儲

2025-03-27 02:00:00

SPIJava接口

2023-07-27 07:46:51

SAFe團隊測試
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久模特 | 久久久久91| 波多野结衣精品在线 | 欧美精品一区二区三区在线 | 91精品久久久久久久久久入口 | 亚洲国产成人av好男人在线观看 | 久久6视频| 亚洲国产欧美一区二区三区久久 | 免费看91| 亚洲精品国产偷自在线观看 | 欧美成人第一页 | 毛片一级片 | 久久九七 | 亚洲一区二区三区久久 | 欧美久久国产 | 黄色三级毛片 | 欧美在线观看免费观看视频 | 91九色在线观看 | 黄色免费网站在线看 | 青青草原精品99久久精品66 | 亚洲在线视频 | 亚洲国产aⅴ成人精品无吗 综合国产在线 | 国产一级视频在线 | 国产精品久久久久久吹潮 | 亚洲精品久久久久久久久久吃药 | 91精品国产欧美一区二区成人 | 精品啪啪 | 草草视频在线免费观看 | 中文字幕乱码视频32 | 色爱综合网 | 日韩欧美中文字幕在线观看 | 男人天堂社区 | 成人在线一区二区 | 高清国产一区二区 | 91精品久久久久久久久久入口 | 国产精品美女久久久久aⅴ国产馆 | 日韩免费1区二区电影 | 夜夜爽99久久国产综合精品女不卡 | av电影一区| 一区在线播放 | 少妇一级淫片免费放播放 |