【问题标题】:Is there a simple method to get properties for all keys in javascript object?是否有一种简单的方法来获取 javascript 对象中所有键的属性?
【发布时间】:2017-02-19 14:24:24
【问题描述】:

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

【问题讨论】:

  • Object.keys(txtMap).sort((a, b) =&gt; txtMap[a] &lt; txtMap[b] ? -1 : txtMap[a] &gt; txtMap[b] ? +1 : 0).
  • 请注意,in 也会检查原型链,因此txtMap[txtArray[i]] += 1 在明显随机且难以找到的情况下可能会产生意想不到的结果。

标签: javascript arrays object for-loop dictionary


【解决方案1】:

您可以使用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(", ") );

【讨论】:

    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2019-06-06
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-01
      • 2012-06-13
      相关资源
      最近更新 更多