所以我创建了这个JS代码来获取一个地图,其中字符串中的每个单词都是键,单词出现的次数就是值。
var txtArray = txtVar.split(" ");
var txtMap = {};
for (var i = 0; i<txtArray.length;i++){
if(txtArray[i] in txtMap)
txtMap[txtArray[i]] += 1;
else
txtMap[txtArray[i]] = 1;
}
现在我需要对它们进行排序,以便我可以通过10个最长的单词和10个最常用的单词对它们进行排序等等,我想我可以找到一种方法来制作一个for循环,我将它存储在数组然后在新的一个出现时将最旧的“顶部”单词向上或向下推,但我认为必须有一个不那么笨拙的方法来完成这项任务?
答案 0 :(得分:2)
这可能是您正在进行的适当方法,然后在完成后对这些结果进行排序/切片:
var allWords = Object.keys(txtMap);
var tenMostFrequent = allWords
.sort((a, b) => txtMap[b] - txtMap[a])
.slice(0, 10);
var longestWords = allWords
.sort((a, b) => b.length - a.length)
.slice(0, 10);
答案 1 :(得分:0)
您可以使用Object.keys()
获取单词数组,然后根据需要使用.sort()
并使用.slice()
获取前10名:
var txtVar = "some sample input to have something to fill the array with - random words the in are the it the what with some random whatever what what ridiculous whatever hello goodbye words the to have";
var txtArray = txtVar.split(" ");
var txtMap = {};
for (var i = 0; i<txtArray.length;i++){
if(txtArray[i] in txtMap)
txtMap[txtArray[i]] += 1;
else
txtMap[txtArray[i]] = 1;
}
var tenLongest = Object.keys(txtMap).sort(function(a, b) {
return b.length - a.length;
}).slice(0, 10);
console.log("Longest: ", tenLongest.join(", "));
var tenMostUsed = Object.keys(txtMap).sort(function(a, b) {
return txtMap[b] - txtMap[a];
}).slice(0, 10)
.map(function(v) { return v + " (" + txtMap[v] + ")"; });
console.log("Most used: ", tenMostUsed.join(", ") );