簡體   English   中英

數組中出現奇數次的值 - 這里發生了什么?

[英]value in array that occurs odd number of times- what is happening here?

當我檢查如何找到出現奇數次的數字時,我遇到了這段代碼。 我試圖理解一切,但我可以弄清楚。 請逐步說明正在發生的事情以及每個變量的含義。

謝謝!

function findOdd(A) {
    let counts = A.reduce((p, n) => (p[n] = ++p[n] || 1, p), {});
    return +Object.keys(counts).find(k => counts[k] % 2) || undefined;


  • reduce是一種 Array 方法,它應該將數組減少為單個值,可以是數組本身、object 或任何平面變量類型
  • reduce將采用 function 和初始累積 object 作為參數
  • 為數組中的每個元素調用 function,並將累積的 object 作為第一個參數 (p) 和單個數組項作為第二個參數 (n) 傳遞
  • function 在這種情況下是箭頭 function 表達式
  • function 主體由逗號運算符連接的兩個表達式組成。 逗號運算符將返回最右邊的表達式作為結果,在本例中為p
  • 如果未設置p[n] ,則逗號運算符 ( p[n] = ++p[n] || 1 ) 的第一個表達式將返回1 ,否則將遞增p[n]並返回結果。 由於邏輯或 ( || ) 的短路評估
  • 這可以寫得更詳細一點
A.reduce(function (p, n) {
  if (p[n]) {
    p[n] = p[n] + 1
  } else {
    p[n] = 1
  }
  return p
}, {});
  • 結果,您收到一個 object ,它計算數組中每個值的出現

  • 然后你有return語句,它將返回counts的第一個鍵,它有一個奇數值

  • 它首先使用Object.keys創建一個counts鍵數組。
  • 然后它遍歷這些鍵並檢查每個鍵對應的值的模除以2 ( % 2 ) 是否為真值(在這種情況下不是零),然后返回該鍵。
  • 它將始終返回具有該屬性的第一個鍵
  • 最后,使用一元加號運算符將此找到的值轉換為數字
  • 如果沒有找到值,則返回 undefined

這里使用了2種方法,您需要了解。

  1. 減少:在這里閱讀https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

  2. 在這里找到閱讀: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find

下面的語句使一個數字的 map 與它的出現

let counts = A.reduce((p, n) => (p[n] = ++p[n] || 1, p), {})

然后第二條語句在 map 中搜索出現奇數次的元素,如果沒有找到這樣的元素,則返回 undefined

return +Object.keys(counts).find(k => counts[k] % 2) || undefined

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM