Javascript 按值对对象数组进行排序

Javascript 按值对对象数组进行排序,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; } r

我正在尝试对一组对象进行排序,这是一个巨大的数组

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

  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;
  };
[{unpleasant: 50}, {sneak: 13}, {marched: 12}, {flaming: 2}, {tongues: 1}]
然后我使用下面的函数对数组进行迭代,它确实对对象进行了一点排序,但似乎是分块进行的:

  WordCounter.prototype.returnWords = function(array) {
    for (var key in array) {
      return array[key];
    }
  };
以下是一些虚拟数据供参考,但实际上阵列中有数千个对象:

[{tongues: 1}, {unpleasant: 50}, {sneak: 13}, {marched: 12}, {flaming: 2}]
我需要这样分类:

  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;
  };
[{unpleasant: 50}, {sneak: 13}, {marched: 12}, {flaming: 2}, {tongues: 1}]

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

你可以使用一个助手函数
getValue
从一个对象中获取一个值,假设它只有一个属性,然后按该属性排序:

函数getValue(obj){ for(让key输入obj)返回obj[key];//返回在对象中找到的任何值 } //样本数据 var arr=[{舌头:1},{不愉快:50},{偷偷摸摸:13},{游行:12},{火焰:2}]; //分类 arr.sort((a,b)=>getValue(b)-getValue(a)); 控制台日志(arr)
.as控制台包装{max height:100%!important;top:0;}
返回for循环内部是个坏主意:它会立即停止for循环。请提供一些示例数据和所需输出。哦,是的,谢谢!-将其更改为console.log for now还
Object.values(a)
看起来可疑:
values
返回一个数组。。。你认为比较与数组有什么关系?嗯,我明白了,我正试图根据每个函数中的值对数组进行排序。你知道当这些键的名称都不同时,我如何访问它们吗?@Freddy你想根据哪个对象属性对数组排序?您能提供阵列中两个对象的示例吗?非常有效。非常感谢。简明,clever@trincot,您知道吗,第一个键的访问速度更快,
Object.keys
for in
或迭代器?在这种特殊情况下,这没有多大关系,因为对象预期只有一个可枚举的自有属性(而没有继承的属性),但如果一个对象有多个可枚举的,自己的属性,
for..in
(或使用迭代器的任何其他方式)将快得多<代码>对象。键
必须检索所有属性,而只需要一个属性。