第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

應(yīng)該用forEach改變數(shù)組的值嗎?

應(yīng)該用forEach改變數(shù)組的值嗎?

德瑪西亞99 2019-03-04 13:13:24
由于js中的數(shù)組是引用類型,所以可以利用類似指針的特性通過改變另一個變量去修改原始的值。我認(rèn)為這其實(shí)是js中的缺陷,所以我不喜歡利用這個"缺陷"去實(shí)現(xiàn)一些功能,在最近的一次code review中,同事指出了這個問題。所以我希望有更多朋友能給我一些建議。下面就是簡單的例子。let arr = [{    a:1,    b:2,}, {    a:3,    b:4,}];如果有以上數(shù)組,我需要將每一項的a改為3。大概有兩種寫法,一種是用forEach,另一種是用map來返回一個新數(shù)組(暫不考慮for循環(huán))。forEach:arr.forEach((item) => {    item.a = 3; });map:arr = arr.map((item) => {   //  有同事指出應(yīng)該聲明一個新變量來存儲map的結(jié)果,這個建議我認(rèn)為是對的。    item.a = 3;    return item;});
查看完整描述

2 回答

?
慕運(yùn)維8079593

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個贊

補(bǔ)充下,剛才沒仔細(xì)看題目。題目的map方法不夠“純粹”,實(shí)際上還是直接修改了每個item的屬性,要想不影響原有對象,應(yīng)該這么寫:


arr = arr.map((item) => {   //  有同事指出應(yīng)該聲明一個新變量來存儲map的結(jié)果,這個建議我認(rèn)為是對的。

    return {

        ...item,

        a:3

    }

});

==============


map方法體現(xiàn)的是數(shù)據(jù)不可變的思想。該思想認(rèn)為所有的數(shù)據(jù)都是不能改變的,只能通過生成新的數(shù)據(jù)來達(dá)到修改的目的,因此直接對數(shù)組元素或?qū)ο髮傩赃M(jìn)行操作的行為都是不可取的。這種思想其實(shí)有很多好處,最直接的就是避免了數(shù)據(jù)的隱式修改。immutable.js是實(shí)現(xiàn)數(shù)據(jù)不可變的一個庫,可通過專屬的API對引用類型進(jìn)行操作,每次形成一個新的對象。


但具體到項目中還是要看團(tuán)隊的要求,都用或者都不用。單單局部使用是沒有效果的。


如果使用了React + Redux 的技術(shù)棧,是比較推薦使用的


另外有一點(diǎn),forEach和map還存在一個編程思想的區(qū)別,前者是命令式編程,后者是聲明式編程,如果項目的風(fēng)格是聲明式的,比如React,那么后者顯然更統(tǒng)一。


查看完整回答
反對 回復(fù) 2019-03-15
  • 2 回答
  • 0 關(guān)注
  • 494 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號