我正在尝试执行以下操作。
首先,输入一个字符串并计算唯一单词的数量。
其次,按降序对唯一字数进行排序。
第三,如果两个单词的单词数相同,则将它们按出现的顺序放置。
问题:为什么单词“ up”首先出现在我返回的数组数组中?
var doc =
"Cause I'm Slim Shady, yes I'm the real Shady, All you other Slim Shadys are just imitating So won't the real Slim Shady, please stand up, Please stand up, Please stand up";
function wordCountEngine(doc) {
var stringModArr = doc.replace(/[.,'\/#!$%\^&\*;:{}=\-_`~?()]/g, "").toLowerCase().split(" ");
var wordLibrary = {};
for (let i = 0; i < stringModArr.length; i++) {
if (wordLibrary.hasOwnProperty(stringModArr[i])) {
wordLibrary[stringModArr[i]] = String((Number(wordLibrary[stringModArr[i]])) + 1);
} else {
wordLibrary[stringModArr[i]] = '1';
}
}
var sortable = [];
for (var word in wordLibrary) {
sortable.push([word, wordLibrary[word]]);
}
var final = sortable.sort(function(a, b) {
return b[1] - a[1];
});
return final;
}
wordCountEngine(doc)
最佳答案
用于排序功能的排序算法不能确保原始顺序。如果将日志放在compareFunction中,则可以调试它。如果需要命令,那么在编写代码时必须考虑到这一点。下面的代码可能会有所帮助。
var doc =
“因为我是Slim Shady,是的,我是真正的Shady,其他所有人的Slim Shady只是在模仿,所以不是真正的Slim Shady,请站起来,请站起来,请站起来”;
function wordCountEngine(doc) {
var stringModArr = doc.replace(/[.,'\/#!$%\^&\*;:{}=\-_`~?()]/g,
"").toLowerCase().split(" ");
var wordLibrary = {};
for (let i = 0; i < stringModArr.length; i++) {
if (wordLibrary.hasOwnProperty(stringModArr[i])) {
wordLibrary[stringModArr[i]] = String((Number(wordLibrary[stringModArr[i]])) + 1);
} else {
wordLibrary[stringModArr[i]] = '1';
}
}
var sortable = [];
let i = 0;
for (var word in wordLibrary) {
sortable.push([i, word, wordLibrary[word]]);
i++;
}
var final = sortable.sort(function(a, b) {
if(b[2] - a[2] != 0) {
return b[2] - a[2];
} else {
return a[0] - b[0];
}
});
return final.map(a => [a[1], a[2]]);
}
wordCountEngine(doc)