簡體   English   中英

使用 reduce 計算字符串數組

[英]Count array of strings with reduce

我正在嘗試使用 reduce 來計算字符串數組中有多少相同的值,但是這個。

const arrayOfStrings = ["63955a83c1a9a4d5365b686c", "63955e3e478e25a859a6e7bb", "63955e3e478e25a859a6e7bb"]

const result = arrayOfStrings.reduce((prev, curr) => {
  prev[curr] = prev[curr] || [{
    id: curr,
    amount: 0
  }];
  prev[curr][curr.amount] += 1
  return prev;
}, [])

我目前得到一個奇怪的數組,但它甚至離我想要的還差得很遠,我期待這樣的事情:

[
  {
    id: "63955a83c1a9a4d5365b686c",
    amount: 1
  },
  {
    id: "63955e3e478e25a859a6e7bb",
    amount: 2
  }
]
  1. 您需要使用 object 而不是數組來初始化reduce

  2. 通過將值分配給acc[c].amount來更新amount

  3. 使用Object.values提取值(嵌套對象)。

 const arr = ["63955a83c1a9a4d5365b686c", "63955e3e478e25a859a6e7bb", "63955e3e478e25a859a6e7bb"]; const out = arr.reduce((prev, curr) => { prev[curr]??= { id: curr, amount: 0 }; prev[curr].amount += 1; return prev; }, {}); console.log(Object.values(out));

您可以使用 reduce 中的find來搜索該值是否已存在於數組中,如果存在,則更新 amount 值,否則初始化一個新的 object 並將其壓入數組。

 const arrayOfStrings = ["63955a83c1a9a4d5365b686c", "63955e3e478e25a859a6e7bb", "63955e3e478e25a859a6e7bb"] const result = arrayOfStrings.reduce((prev, curr) => { let o = prev.find((obj) => obj.id === curr) o? o.amount++: prev.push({ id: curr, amount: 1 }) return prev; }, []) console.log(result)

暫無
暫無

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

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