如何计算数组中的值并在新数组中的对象中设置它们?(Javascript)

如何计算数组中的值并在新数组中的对象中设置它们?(Javascript),javascript,arrays,for-loop,Javascript,Arrays,For Loop,基本上我有一个包含大量单词的数组。我想实现一个新数组,它将单词和单词数量作为对象的属性。像这样: const arrayWithWords = [`word1`, `word2`, `word5`, `word1`, `word3`, `word6`, `word2`, `word3`, `word1`, `word5`] // and I want to achieve the array below const newArray = [ {name: `word1`, amount: 3

基本上我有一个包含大量单词的数组。我想实现一个新数组,它将单词和单词数量作为对象的属性。像这样:

const arrayWithWords = [`word1`, `word2`, `word5`, `word1`, `word3`, `word6`, `word2`, `word3`, `word1`, `word5`]

// and I want to achieve the array below

const newArray = [ {name: `word1`, amount: 3} {name: `word2`, amount: 2} {name: `word3`, amount: 2} {name: `word4`, amount: 0} {name: `word5`, amount: 2} {name: `word6`, amount:1}]

我试过使用for循环,但总是卡住。有什么可能解决这个问题呢?

你可以通过计算频率来轻松解决这个问题。 常数数组,带字=[ `字1`, `字2`, `字5`, `字1`, `字3`, `字6`, `字2`, `字3`, `字1`, `字5`, ]; 让ret=arrayWithWords.reducep,c=>{ 如果!p[c]p[c]=1; 否则p[c]+=1; 返回p; }, {}; ret=Object.entriesret.mapx=>{name:x[0],amount:x[1]};
console.logret 你可以通过计算频率很容易地解决这个问题。 常数数组,带字=[ `字1`, `字2`, `字5`, `字1`, `字3`, `字6`, `字2`, `字3`, `字1`, `字5`, ]; 让ret=arrayWithWords.reducep,c=>{ 如果!p[c]p[c]=1; 否则p[c]+=1; 返回p; }, {}; ret=Object.entriesret.mapx=>{name:x[0],amount:x[1]}; console.logret 使用Array.prototype.reduce,可以获得数组中相同项目的计数

常量输入=[`word1`、`word2`、`word5`、`word1`、`word3`、`word6`、`word2`、`word3`、`word1`、`word5`]; const groupedBy=input.reduceac,cur=>{ acc[cur]?acc[cur]['amount']+:acc[cur]={ 姓名:cur,, 金额:1 }; 返回acc; }, {}; const result=Object.valuesGroupBy; console.logresult 使用Array.prototype.reduce,可以获得数组中相同项目的计数

常量输入=[`word1`、`word2`、`word5`、`word1`、`word3`、`word6`、`word2`、`word3`、`word1`、`word5`]; const groupedBy=input.reduceac,cur=>{ acc[cur]?acc[cur]['amount']+:acc[cur]={ 姓名:cur,, 金额:1 }; 返回acc; }, {}; const result=Object.valuesGroupBy;
console.logresult 通过将数组转换成一个映射并使用下面给出的映射对它们进行计数,您可以很容易地做到这一点

常量数组WithWords=[`word1`、`word2`、`word5`、`word1`、`word3`、`word6`、`word2`、`word3`、`word1`、`word5`] 设arrayMap={}; 数组Withwords.forEachword=>{ 数组映射[字]=数组映射[字]?数组映射[字]+1:1; }; const newArray=Object.keysarrayMap.mapkey=>{ 返回{name:key,amount:arrayMap[key]}; };
console.lognewArray 通过将数组转换成一个映射并使用下面给出的映射对它们进行计数,您可以很容易地做到这一点

常量数组WithWords=[`word1`、`word2`、`word5`、`word1`、`word3`、`word6`、`word2`、`word3`、`word1`、`word5`] 设arrayMap={}; 数组Withwords.forEachword=>{ 数组映射[字]=数组映射[字]?数组映射[字]+1:1; }; const newArray=Object.keysarrayMap.mapkey=>{ 返回{name:key,amount:arrayMap[key]}; };
console.lognewArray;尝试使用reduce?也许到目前为止您可以分享您的尝试?为什么要对字符串使用反勾号?尝试使用reduce?也许到目前为止你可以分享你的尝试?为什么要用反勾来表示字符串?