获取Javascript中具有最高值的对象键

时间:2017-03-10 11:31:09

标签: javascript arrays associative-array

想象一下像这样的对象:

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它的答案对我来说也无法帮助我。

4 个答案:

答案 0 :(得分:3)

之前评论过:

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

keys.slice(0,n)

答案 1 :(得分: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; }

答案 2 :(得分:1)

您可以使用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个键

答案 3 :(得分:-1)



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));