我正在使用纯 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/