【问题标题】:Get object keys with the highest value in Javascript获取 Javascript 中具有最高值的对象键
【发布时间】:2017-03-10 11:31:09
【问题描述】:

想象一个像这样的对象:

var values = {
    "2": 1,
    "53": 2,
    "56": 4,
    "57": 9,
    "61": 2,
    "62": 16,
    "63": 2,
    "398": 24,
    ...
}

我的目标是找到 10 个具有最高值的对象键。在这种情况下:398,然后是 62,依此类推(=[398, 62, ...])。我知道如何将其放入数组中,但不知道如何接收属性键。

重要提示:我无法更改格式,因为它是服务器响应。

我尝试了for (key in values) {} 循环,但不知道如何继续。 This similar question 它的回答也帮不了我。

【问题讨论】:

  • 创建键数组,然后根据值降序排序,得到第一个 10

标签: javascript arrays associative-array


【解决方案1】:

如前所述:

  • 创建一个键数组:Object.keys(object)
  • 根据值对该数组进行排序:sort((a,b)=> object[b] - object[a])
  • 获取必要的值:keys.slice(0,n)

var value = {2:1,53:2,56:4,57:9,61:2,62:16,63:2,398:24};

function getKeysWithHighestValue(o, n){
  var keys = Object.keys(o);
  keys.sort(function(a,b){
    return o[b] - o[a];
  })
  console.log(keys);
  return keys.slice(0,n);
}

console.log(getKeysWithHighestValue(value, 4))

【讨论】:

    【解决方案2】:

    您可以按 values 属性排序并对结果进行切片。

    var values = { 2: 1, 53: 2, 56: 4, 57: 9, 61: 2, 62: 16, 63: 2, 398: 24 },
        result = Object
            .keys(values)
            .sort(function (a, b) { return values[b] - values[a]; })
            .slice(0, 10)
            .map(Number);
    
    console.log(result);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

      【解决方案3】:

      您可以使用Object.keys获取键值

      var value = {
      "2": 1,
      "53": 2,
      "56": 4,
      "57": 9,
      "61": 2,
      "62": 16,
      "63": 2,
      "398": 24,
      }
      var parsedKeys = Object.keys(value).map(x => parseInt(x));
      var sortedKeys = parsedKeys.sort(function (a, b) {  return b - a;  });
      

      现在您可以通过sortedKeys.slice(0, 10);获得最高的前10键

      【讨论】:

      • 如果我有一个带有 count 的单词数组怎么办?例如:- [ { "text":"hello", "size":10},{ "text":"world", "size":2} ,....] 与 100 个对象相同并找到前 10 个文本并将其存储在一个数组中?
      • here给出的例子
      【解决方案4】:

      var value = {
          "2": 1,
          "53": 2,
          "56": 4,
          "57": 9,
          "61": 2,
          "62": 16,
          "63": 2,
          "398": 24
      };
      
      var sortable = [];
      for (var key in value) {
          sortable.push([key, value[key]]);
      }
      
      sortable.sort(function(a, b) {
          return b[1] - a[1];
      });
      
      var result = [];
      sortable.forEach(function(a) {
        result.push(a[0]);
      });
      
      console.log(result.slice(0, 10));

      【讨论】:

        猜你喜欢
        • 2016-06-28
        • 1970-01-01
        • 2021-12-28
        • 1970-01-01
        • 2020-11-25
        • 1970-01-01
        • 2011-09-10
        相关资源
        最近更新 更多