javascript:对对象数组进行排序会得出不一致的结果

标签 javascript arrays json sorting

我正在使用纯 JavaScript 对对象数组进行降序排序。我最初认为 JSON.stringify 方法导致了该问题,如[此处][1]所述。显然 JSON.stringify 并没有按照设计保留对象的顺序。给出下面的对象数组,我似乎使用以下代码获得了随机排序顺序,其中我对对象数组进行排序,然后导出数组中第一个对象的权重属性。

var byWeight = objArray.slice(0);
var sorted = byWeight.sort(function(a,b) { return b.weight - a.weight; } );
sorted[0].something.weight;

在这段代码的不同运行中,我似乎随机得出了 0.29 或 0.35 的权重。为什么会出现这种情况?

这是数组:

[
  {
    "something": {
      "terms": [
        {
          "elements": {
            "number": {
              "span": [
                9,
                10
              ],
              "value": "1"
            }
          },
          "span": [
            9,
            12
          ],
          "value": "1g",
          "label": "grams"
        }
      ],
      "span": [
        9,
        12
      ],
      "weight": 0.29,
      "value": "1gm"
    }
  },
  {
    "something": {
      "terms": [
        {
          "elements": {
            "number": {
              "span": [
                16,
                18
              ],
              "value": "30"
            }
          },
          "span": [
            16,
            20
          ],
          "value": "30ml",
          "label": "liters"
        }
      ],
      "span": [
        16,
        20
      ],
      "weight": 0.35,
      "value": "30ml"
    }
  }
]

最佳答案

您的引用资料有误。改变这个

var sorted = byWeight.sort(function(a,b) { return b.weight - a.weight; } );

到(观看.something.)

byWeight.sort(function (a, b) { return b.something.weight - a.something.weight; });

工作模式:

var data = [
  {
      "something": {
          "terms": {
              "span": [
              9,
              12
              ],
              "value": "1g",
              "label": "grams"
          }
      ,
          "span": [
          9,
          12
          ],
          "weight": 0.29,
          "value": "1gm"
      }
  },
  {
      "something": {
          "terms": {
              "span": [
              16,
              20
              ],
              "value": "30ml",
              "label": "liters"
          }
      ,
          "span": [
          16,
          20
          ],
          "weight": 0.35,
          "value": "30ml"
      }
  }
];

var sorted = data.slice(0);
sorted.sort(function (a, b) {
    return b.something.weight - a.something.weight; // desc!
});
document.write('<pre>' + JSON.stringify(sorted, 0, 4) + '</pre>');

关于javascript:对对象数组进行排序会得出不一致的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32206550/

相关文章:

javascript - 将元素放在文本框上

javascript - 重现色彩效果

javascript - 覆盖数组中的值

java - 使用 java 处理 Json API 响应

java - Spring:使用 POST 请求保存带有外键的对象

javascript - 在 React 中过滤数组中的数组

javascript - Object.create 复制数组和对象属性的引用

c - 使用 getchar() 获取多个值。

java - Jtables(数组常量初始值设定项)java

c++ - 具有对象数组的对象