javascript - 按值对对象数组进行排序

标签 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}]

知道为什么它只排序一点点而不是整个哈希数组吗?

最佳答案

您可以使用辅助函数 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; }

关于javascript - 按值对对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44488117/

相关文章:

javascript - 为什么“复制”按钮复制 'undefined' 而不是从 html dom 复制值?

javascript - 我怎样才能让机器人工作?

javascript - jQuery UI 相对于两个元素的位置

javascript - jQuery : extract tag from data

javascript - 更新使用 jQuery 检索的另一个 HTML 文件中的元素

javascript - 在浏览器关闭时删除 cookie 而不是在页面刷新时

javascript - Node.js Docker 镜像环境变量

javascript - 在计算机上禁用 HammerJS 滑动和拖动事件? (即禁用鼠标事件?)

javascript - Jquery vs Google Closure va GWT 大型 Web 应用程序开发的优缺点

javascript - React Component 内联样式速记声明相互覆盖