是否有一个简单的方法来获取javascript对象中所有键的属性?

时间:2016-10-11 04:34:58

标签: javascript arrays object for-loop dictionary

所以我创建了这个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循环,我将它存储在数组然后在新的一个出现时将最旧的“顶部”单词向上或向下推,但我认为必须有一个不那么笨拙的方法来完成这项任务?

2 个答案:

答案 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(", ") );