国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【深入探討】JavaScript 中的 forEach 和 map 區(qū)別

這篇具有很好參考價值的文章主要介紹了【深入探討】JavaScript 中的 forEach 和 map 區(qū)別。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?? 個人主頁:不叫貓先生,公眾號:前端Clodplay
???♂? 作者簡介:前端領(lǐng)域優(yōu)質(zhì)作者、阿里云專家博主,共同學(xué)習(xí)共同進步,一起加油呀!
?優(yōu)質(zhì)專欄:VS Code插件開發(fā)極速入門
?? 資料領(lǐng)?。呵岸诉M階資料可以找我免費領(lǐng)取

【深入探討】JavaScript 中的 forEach 和 map 區(qū)別,javascript,開發(fā)語言,map,forEach

區(qū)別

map會返回一個新的數(shù)組,而forEach不會。具體探討一下,實則會有新的發(fā)現(xiàn)!

下面來探討一下原因

手寫 map 和 forEach

手寫map,如下:

function myMap(array, callback) {
  //存儲結(jié)果
  const result = [];
  for (let i = 0; i < array.length; i++) {
    result.push(callback(array[i], i, array));
  }
  return result;
}

調(diào)用上面的myMap函數(shù)

// 定義一個回調(diào)函數(shù),用于對數(shù)組元素進行操作
function double(value) {
  return value * 2;
}

// 定義一個數(shù)組
const numbers = [1, 2, 3, 4, 5];

// 調(diào)用 myMap 函數(shù),并傳入定義好的回調(diào)函數(shù)
const doubledNumbers = myMap(numbers, double);

console.log(doubledNumbers); // 輸出 [2, 4, 6, 8, 10]

手寫forEach,如下:

function myForEach(array, callback) {
  for (let i = 0; i < array.length; i++) {
    callback(array[i], i, array);
  }
}

調(diào)用上面的myForEach函數(shù)

// 定義一個回調(diào)函數(shù),用于對數(shù)組元素進行操作
function logItem(item, index) {
  console.log(`Index ${index}: ${item}`);
}

// 定義一個數(shù)組
const fruits = ["Apple", "Banana", "Orange", "Mango"];

// 調(diào)用 myForEach 函數(shù),并傳入定義好的回調(diào)函數(shù)
myForEach(fruits, logItem);

總結(jié):
上面可以看到 forEach 和 map 的實現(xiàn)原理相似。它們都是通過遍歷數(shù)組,對數(shù)組的每個元素執(zhí)行特定的函數(shù)。區(qū)別主要在于它們處理函數(shù)返回值的方式不同
forEach 忽略函數(shù)的返回值,而 map 則將函數(shù)的返回值收集到一個新的數(shù)組中

可以看到 map 和 forEach都會有一個for循環(huán)處理,且map有return

 for (let i = 0; i < array.length; i++) {
    result.push(callback(array[i], i, array));
  }
for (let i = 0; i < array.length; i++) {
    callback(array[i], i, array);
  }

那么能不能forEach也return,測試一下

        const array = [1, 2, 3]

        const result = array.forEach((element) => {
            return element * 2; // 這個返回值不會被 forEach 捕獲或使用
        });

        console.log(result); // 輸出: undefined

但是map,return 之后是有值的

        const array = [1, 2, 3]

        const result = array.map((element) => {
            return element * 2; // 這個返回值會被 map 捕獲或使用
        });

        console.log(result); // 輸出: [2, 4, 6]

map 和 forEach 會不會改變原數(shù)組

map 和 forEach 會不會改變原數(shù)組,需要看數(shù)據(jù)類型,具體分為基礎(chǔ)數(shù)據(jù)類型和引用類型。

處理基本類型數(shù)據(jù)

forEach 處理基本數(shù)據(jù)類型

        let array = [1, 2, 3, 4];
        array.forEach(item => {
            item = item + 1
        })
        console.log(array); // [1,2,3,4]

map 處理基本數(shù)據(jù)類型

        let array = [1, 2, 3, 4];
        array.map(item => {
            item = item + 1
        })
        console.log(array); // [1,2,3,4]

測試后發(fā)現(xiàn),都沒有改變原數(shù)組

處理引用類型數(shù)據(jù)

forEach 處理引用類型數(shù)據(jù)

        const arr = [{
            name: 'shaka',
            age: 23
        }, {
            name: 'virgo',
            age: 18
        }]
        arr.forEach(item => {
            if (item.name === 'shaka') {
                item.age = 100
            }
        })
        console.log(arr); //[{name: 'shaka', age: 100}, {name: 'virgo', age: 18}]

【深入探討】JavaScript 中的 forEach 和 map 區(qū)別,javascript,開發(fā)語言,map,forEach
map 處理引用類型數(shù)據(jù)

 const arr = [{
            name: 'shaka',
            age: 23
        }, {
            name: 'virgo',
            age: 18
        }]
        arr.map(item => {
            if (item.name === 'shaka') {
                item.age = 100
            }
        })
        console.log(arr); //[{name: 'shaka', age: 100}, {name: 'virgo', age: 18}]

【深入探討】JavaScript 中的 forEach 和 map 區(qū)別,javascript,開發(fā)語言,map,forEach
發(fā)現(xiàn)都改變了原數(shù)據(jù)

思考:為什么基礎(chǔ)數(shù)據(jù)類型不會更改原數(shù)據(jù),引用類型不會

這是因為在使用 forEach 和 map 方法時,對引用類型元素的修改會直接反映在原始數(shù)組中。這是因為引用類型的元素實際上存儲的是引用(內(nèi)存地址),而非值本身。因此,通過引用可以訪問和修改原始數(shù)組中的元素。而number、string、Boolean、null、undefined它們在棧內(nèi)存中直接存儲變量與值。

具體解釋如下:
基本數(shù)據(jù)類型為值傳遞,callback的執(zhí)行和原數(shù)組毫不相干,所以forEach無法修改基本數(shù)據(jù)的數(shù)組
基本數(shù)據(jù)類型(Primitive data types)如數(shù)值(Number)、字符串(String)、布爾值(Boolean)、null 和 undefined 等,它們在內(nèi)存中是直接存儲變量的值,而不是引用。因此,對于基本數(shù)據(jù)類型,當(dāng)它們作為數(shù)組的元素被傳遞給 forEach 或 map 方法時,處理的是它們的值的拷貝,而不是原始值本身。因此,對于基本數(shù)據(jù)類型,任何更改都只是在處理的拷貝上進行,不會影響到原始數(shù)組中的值。


引用類型(Reference types)如對象(Object)、數(shù)組(Array)和函數(shù)(Function)等,它們在內(nèi)存中存儲的是地址,即指向存儲實際數(shù)據(jù)的內(nèi)存地址。因此,當(dāng)引用類型的元素被傳遞給 forEach 或 map 方法時,處理的是對該地址的引用,而不是原始數(shù)據(jù)本身。這意味著對引用類型的元素進行的任何更改都會直接反映在原始數(shù)組中,因為它們都指向相同的內(nèi)存地址。

好書推薦

《ReactJS入門實踐》
【深入探討】JavaScript 中的 forEach 和 map 區(qū)別,javascript,開發(fā)語言,map,forEach
本書涵蓋了編寫高質(zhì)量React代碼要掌握的一切內(nèi)容。你將學(xué)習(xí)使用函數(shù)方法和類方法編寫React組件;學(xué)習(xí)如何使用幾種不同的方法來管理應(yīng)用程序的狀態(tài),包括使用React Hooks和setState方法;學(xué)習(xí)如何將組件合在一起來創(chuàng)建完整的動態(tài)用戶界面;還將學(xué)習(xí)如何從外部數(shù)據(jù)源獲取數(shù)據(jù)并在應(yīng)用程序中使用。此外,本書介紹了如何在用戶的Web瀏覽器中存儲數(shù)據(jù),以提高應(yīng)用程序的性能和可用性。談到可用性,你將會了解在移動設(shè)備和桌面上運行應(yīng)用程序的最佳實踐,還將了解如何確保應(yīng)用程序可訪問。

如果你對《ReactJS實踐入門》感興趣的話,可以點擊鏈接購買:鏈接直達文章來源地址http://www.zghlxwxcb.cn/news/detail-860693.html

到了這里,關(guān)于【深入探討】JavaScript 中的 forEach 和 map 區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【面試題】詳解JavaScript中的Map()

    ?前端面試題庫 ( 面試必備) ?? ? ? ? ? ? 推薦:★★★★★ 地址:前端面試題庫 JavaScript是一種動態(tài)、解釋性的編程語言,用于開發(fā)web上的動態(tài)頁面和交互式應(yīng)用程序。與其他編程語言相比,JavaScript擁有更加靈活的內(nèi)置數(shù)據(jù)類型,并且擁有更高級別的調(diào)試和錯誤處理工

    2024年02月11日
    瀏覽(25)
  • forEach跟Map區(qū)別

    forEach 和 map 都是 JavaScript 中數(shù)組的常用方法,但它們之間的主要區(qū)別在于它們的返回值和用途。 1、forEach:它是一個無返回值的方法,它的作用是遍歷數(shù)組,對數(shù)組的每個元素執(zhí)行相同的操作。 2、map:它是一個有返回值的方法,它的作用是創(chuàng)建一個新的數(shù)組,其元素為原始

    2024年04月11日
    瀏覽(19)
  • 深入理解JavaScript中的Proxy代理

    JavaScript中的Proxy代理是ES6中引入的一項強大功能,它允許我們攔截、修改和自定義對象的底層操作。通過使用Proxy,我們可以在對象的屬性讀取、賦值、函數(shù)調(diào)用等操作之前或之后執(zhí)行自定義的行為。在本文中,我們將深入探討Proxy代理的各種用法和功能。 Proxy是JavaScript的一

    2024年02月07日
    瀏覽(16)
  • JavaScript——forEach()方法

    JavaScript——forEach()方法

    ? 舉例說明: !注意:只遍歷有值的元素

    2024年02月19日
    瀏覽(18)
  • JavaScript forEach 方法跳出循環(huán)

    這個問題平時工作中基本不會遇到,通常是面試時,有的面試官喜歡問這個,所以有了探討的意義。 首先我們來看看 for 循環(huán)是怎么處理跳出的。 JavaScript中,for循環(huán)可以使用 break 和 continue 來跳出: continue:跳出本次循環(huán) break:結(jié)束循環(huán) 了解了 for 循環(huán)跳出之后,forEach 如何

    2024年02月03日
    瀏覽(22)
  • 高級編程JavaScript中的Map鍵值對你知道嗎?一篇文章看懂

    Map 保存鍵值對,其中鍵可以是任何數(shù)據(jù)類型。 Map 會記住鍵的原始插入順序。 Map 提供表示映射大小的屬性。 方法 描述 new Map() 創(chuàng)建新的 Map 對象。 set() 為 Map 中的鍵設(shè)置值。 get() 獲取 Map 對象中鍵的值。 clear() 從 Map 中移除所有元素。 delete() 刪除由某個鍵指定的 Map 元素。

    2024年01月25日
    瀏覽(24)
  • 深入了解JavaScript中的AJAX和HTTP請求

    深入了解JavaScript中的AJAX和HTTP請求

    在現(xiàn)代Web開發(fā)中,AJAX(Asynchronous JavaScript and XML)和HTTP請求被廣泛應(yīng)用于實現(xiàn)動態(tài)交互式網(wǎng)頁。本文將深入探討AJAX的概念、工作原理以及使用方法。 AJAX是一種利用JavaScript和HTTP請求與服務(wù)器進行異步通信的技術(shù)。傳統(tǒng)的瀏覽器請求頁面會刷新整個頁面,而AJAX允許在不刷新頁

    2024年02月08日
    瀏覽(30)
  • 深入解析JavaScript中的var、let和const

    深入解析JavaScript中的var、let和const

    ????? 個人主頁: 《愛蹦跶的大A阿》 ?? 當(dāng)前正在更新專欄: 《VUE》?、《JavaScript保姆級教程》、《krpano》、《krpano中文文檔》 ?? ? ????????變量的聲明是編程中非常基礎(chǔ)和關(guān)鍵的概念。在ES6之前,JavaScript只有var一種聲明變量的方式。ES6帶來了let和const來聲明變量

    2024年01月20日
    瀏覽(25)
  • typeof 在TypeScript中和JavaScript中的區(qū)別

    typeof 在TypeScript中和JavaScript中的區(qū)別

    ????????在TypeScript中和JavaScript中都有typeOf,但是作用用法卻大有不同。 一、typeof用來判斷數(shù)據(jù)類型返回結(jié)果: 基本數(shù)據(jù)類型:string,number,boolean,undefined 引用數(shù)據(jù)類型:object (不管是什么引用類型就返回object),function 二、typeof判斷變量是否存在 ????????ts中的typeof可

    2024年02月09日
    瀏覽(36)
  • JS中Array的forEach、map、filter方法區(qū)別?

    一:基本用法 1、forEach() 函數(shù)用于對數(shù)組中的每個元素執(zhí)行給定的函數(shù),而它不返回任何值,它只是對每個元素調(diào)用傳入的函數(shù)。這個函數(shù)可以接受三個參數(shù):當(dāng)前元素的值、當(dāng)前元素的索引和整個數(shù)組。 2、map() 函數(shù)也用于對數(shù)組中的每個元素執(zhí)行給定的函數(shù),但它返回一

    2024年02月05日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包