2 回答

TA貢獻(xiàn)1804條經(jīng)驗 獲得超8個贊
它不“知道”,你在這里做:sum[val] = (sum[val] || 0) + 1;
sum
是第一次迭代中的空對象,然后它是從上一次迭代返回的對象(由于 是相同的return sum;
)。Andval
是當(dāng)前值('y'
或'n'
)。
因此,在第一次迭代中,sum
will be{}
和val
will be 'y'
。然后這條線將設(shè)置sum['y'] = 1
,因為它本質(zhì)上是這樣的sum['y'] = (sum['y'] || 0) + 1
- 并且在那個點(diǎn)上,所以你會知道哪個是哪個。sum['y']
undefined
(undefined || 0) + 1
0 + 1
1
下一次發(fā)生同樣的情況'n'
。
第三次,sum['y']
已經(jīng)1
是以前的了,所以表達(dá)式變成(1 || 0) + 1
which is 1 + 1
which is 2
,所以你得到sum['y'] = 2
。
等等。
從調(diào)試器中查看此截屏視頻:https ://recordit.co/FVkXjW1b5y

TA貢獻(xiàn)1816條經(jīng)驗 獲得超4個贊
.reduce()
有兩個參數(shù)
回調(diào)函數(shù)
初始值(可選)
在您的情況下,空對象文字{}
是初始值。如果提供了初始值,它將作為第一個參數(shù)傳遞給回調(diào)函數(shù)。
的回調(diào)函數(shù)的第二個參數(shù)是調(diào)用的.reduce()
數(shù)組的當(dāng)前元素.reduce()
。在第一次迭代中,val
是arr
數(shù)組中的第一個元素,即'y'
。
sum[val] = (sum[val] || 0) + 1;
在每次迭代中,上面的語句將添加值val
作為sum
對象中的鍵(初始值),其值是0 + 1
ifsum[val]
未定義或sum[val] + 1
ifsum[val]
已定義。
你的代碼是如何執(zhí)行的:
第一次調(diào)用 callback 時,sum
is{}
和val
is 'y'
。因為sum[val]
orsum['y']
是undefined
,'y'
被添加為 keysum
并且它的值為 1。當(dāng)回調(diào)函數(shù)被第二次調(diào)用時同樣的事情發(fā)生。2個電話后,sum
看起來像{ y: 1, n: 1 }
。
在第三次調(diào)用中,因為sum[val]
等于1
,所以之前添加的鍵y
被覆蓋,sum[val] + 1
其計算結(jié)果為1 + 1
。所以在第三次通話后,sum
看起來像{ y: 2, n: 1 }
。在隨后的回調(diào)函數(shù)調(diào)用中也會發(fā)生同樣的事情。
添加回答
舉報