所以我一直在解決問題,我找到了解決方案,但我想請人進一步解釋為什么這實際上有效
const game = {
team1: 'Bayern Munich',
team2: 'Borrussia Dortmund',
score: '4:0',
scored: ['Lewandowski', 'Gnarby', 'Lewandowski', 'Hummels'],
date: 'Nov 9th, 2037',
odds: {
team1: 1.33,
x: 3.25,
team2: 6.5,
},
};
因此,擁有上述物件,我試圖:創建一個名為“scorers”的物件,其中包含作為屬性得分的球員的姓名,以及作為值的進球數。在這場比賽中。我提出了這個解決方案:
const scorers = {};
for (const player of game.scored) {
scorers[player] ? scorers[player] : (scorers[player] = 1);
};
console.log(scorers);
uj5u.com熱心網友回復:
您首先創建一個新的空物件,然后遍歷 game.scored 陣列中的所有玩家。下一行(條件運算子或三元)的作用如下:
if (scorers[player])
scorers[player] ;
else
scorers[player] = 1;
三元運算子的作業方式如下:<condition> ? <return if true> : <return if false>. 您還可以鏈接三元運算子:<condition1> ? <return if true> : (<condition2> ? <return if true> : <return if false>)
在“if”條件下,如果您只傳遞一個變數,它會將其與true. 基本上是它if (scorers[player]===true),它檢查player物件記分器中是否存在密鑰。如果是,則將其分數增加 1,如果不是,則使用值 1 創建它。
希望你能從我的簡短解釋中理解!
uj5u.com熱心網友回復:
它之所以有效,是因為它(ab)純粹將條件運算子用于其第二個和第三個運算元的副作用,而忽略了其結果。評估第一個運算元,然后評估第二個(執行 )或第三個(執行賦值)。scorers[player]如果undefined你還沒有為那個屬性分配任何東西,這是錯誤的,所以它會評估第三個運算元(scorers[player] = 1);;如果你給分配了一些東西scorers[player],它將是一個不是 的數字0,所以它是真實的,并且運算子會評估第二個運算元 ( scorers[player] )。
該代碼與這個可能更清晰的代碼所做的相同:
const scorers = {};
for (const player of game.scored) {
if (scorers[player]) {
scorers[player] ;
} else {
scorers[player] = 1;
}
}
console.log(scorers);
(旁注:您不要放在;附加到 a 的塊之后for。)
您通常會看到這種寫法的另一種方式是:
const scorers = {};
for (const player of game.scored) {
scorers[player] = (scorers[player] ?? 0) 1;
// Or before the `??` operator was added:
// scorers[player] = (scorers[player] || 0) 1;
}
console.log(scorers);
如果scorers[player]是undefined,則空值合并運算子 ( ??) 將評估scorers[player] ?? 0為0,因此我們將其加一。否則它將是 的值scorers[player],因此我們將其加一。
uj5u.com熱心網友回復:
當你回圈通過game.scored. 你有決策邏輯來檢查是否scorers[player]有這個 player。如果是,則對該玩家加一。如果不是,則將該玩家添加到scorers 物件并將值設定為 1。

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/528706.html
上一篇:物件分配相同的鍵不同的值
