[英]How to count strings in array using only reduce, when some strings might also need splitting first
[英]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
}
]
您需要使用 object 而不是數組來初始化reduce
。
通過將值分配給acc[c].amount
來更新amount
。
使用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.