我正在编写频率计数器代码,在其中我计算给定字符串中每个单词的频率。
我正在创建一个对象,并将每个单词都作为键,并且将频率作为值来构成键值对。
function wordCount(str) {
tempStr = str.toUpperCase()
arr1 = tempStr.split(" ")
let frequencyConter1 = {}
for (let val of arr1) {
frequencyConter1[val] = (frequencyConter1[val] || 0) + 1
}
for (key in frequencyConter1) {
console.log(key, frequencyConter1[key])
}
}
wordCount("My name is Xyz 1991 He is Abc Is he allright")
Run Code Online (Sandbox Code Playgroud)
1991 1
MY 1
NAME 1
IS 3
XYZ 1
HE 2
ABC 1
ALLRIGHT 1
Run Code Online (Sandbox Code Playgroud)
为什么1991年的产量居首位?
应该在XYZ之后,对吗?
JavaScript中的对象不保留遇到顺序,要保留键的插入顺序,请使用新的Map对象:
function wordCount(str) {
tempStr = str.toUpperCase();
arr1 = tempStr.split(" ");
let frequencyConter1 = new Map();
for (let val of arr1 ){
frequencyConter1.set(val, ((frequencyConter1.get(val) || 0) + 1) );
}
for( let [key, value] of frequencyConter1){
console.log(`${key} ${value}`);
}
}
wordCount("My name is Xyz 1991 He is Abc Is he allright")Run Code Online (Sandbox Code Playgroud)
注意:如@Kaiido所述,从ES2015开始,在某些情况下会对对象的键施加顺序。该顺序是整数,例如按升序排列的键,按插入顺序排列的普通键和按插入顺序排列的Symbols,但它不适用于所有迭代方法。
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |