按值排序对象数组

时间:2017-06-11 19:50:56

标签: javascript

我试图对一组对象进行排序,这是巨大的。

我创建了以下功能。我有一个比较函数,如下所示:

  WordCounter.prototype.compare = function(a, b) {
    if (Object.values(a) < Object.values(b)) {
      return -1;
    }
    if (Object.values(a) > Object.values(b)) {
      return 1;
    }
    return 0;
  };

然后我在这个函数中引用它:

WordCounter.prototype.sortArray = function(array) {

    this.sortedArray = array.sort(this.compare);
  };

然后我使用下面的函数迭代数组,它会对对象进行一些排序,但它似乎是以块的形式进行的:

  WordCounter.prototype.returnWords = function(array) {
    for (var key in array) {
      return array[key];
    }
  };

以下是一些虚拟数据供参考,但实际上数组中有数千个对象:

[{tongues: 1}, {unpleasant: 50}, {sneak: 13}, {marched: 12}, {flaming: 2}]

我需要这样排序:

[{unpleasant: 50}, {sneak: 13}, {marched: 12}, {flaming: 2}, {tongues: 1}]

任何想法为什么它只是排序一点而不是整个哈希数组?

1 个答案:

答案 0 :(得分:2)

您可以使用辅助函数getValue从对象获取值,假设它只有一个属性,并按此排序:

function getValue(obj) {
    for (let key in obj) return obj[key]; // return any value found in the object
}

// Sample data
var arr = [{tongues: 1}, {unpleasant: 50}, {sneak: 13}, {marched: 12}, {flaming: 2}];

// Sort it
arr.sort((a, b)  => getValue(b) - getValue(a));

console.log(arr);
.as-console-wrapper { max-height: 100% !important; top: 0; }