在 JavaScript 中排序 JSON
Sorting JSON in JavaScript
我知道之前有人问过类似的问题,我在这里提到了这个问题:sort json object in javascript 但我仍然找不到问题的答案。所以我走了。我有一个 JSON 对象结构如下:
[
{
"toothNumber": "01",
"name": "John"
},
{
"toothNumber": "18",
"name": "John"
},
{
"toothNumber": "19",
"name": "John"
},
{
"toothNumber": "17",
"name": "John"
},
{
"toothNumber": "01,32",
"name": "John"
},
{
"toothNumber": "25,32",
"name": "John"
},
{
"toothNumber": "",
"name": "John"
},
{
"toothNumber": "15",
"name": "John"
}
]
当我使用下面的代码进行排序时,我没有得到预期的结果:
json.sort(function(a, b){
return a.toothNumber - b.toothNumber;
});
下面是实际结果,不是我想的那样。任何帮助将不胜感激。
实际结果:
[
{
"toothNumber": "",
"name": "John"
},
{
"toothNumber": "01",
"name": "John"
},
{
"toothNumber": "15",
"name": "John"
},
{
"toothNumber": "17",
"name": "John"
},
{
"toothNumber": "18",
"name": "John"
},
{
"toothNumber": "19",
"name": "John"
},
{
"toothNumber": "01,32",
"name": "John"
},
{
"toothNumber": "25,32",
"name": "John"
}
]
预期结果:
[
{
"toothNumber": "",
"name": "John"
},
{
"toothNumber": "01",
"name": "John"
},
{
"toothNumber": "01,32",
"name": "John"
},
{
"toothNumber": "15",
"name": "John"
},
{
"toothNumber": "17",
"name": "John"
},
{
"toothNumber": "18",
"name": "John"
},
{
"toothNumber": "19",
"name": "John"
},
{
"toothNumber": "25,32",
"name": "John"
}
]
按字符串排序,而不是数字比较。
const json = [ { "toothNumber": "01", "name": "John" }, { "toothNumber": "18", "name": "John" }, { "toothNumber": "19", "name": "John" }, { "toothNumber": "17", "name": "John" }, { "toothNumber": "01,32", "name": "John" }, { "toothNumber": "25,32", "name": "John" }, { "toothNumber": "", "name": "John" }, { "toothNumber": "15", "name": "John" }];
json.sort(function(a, b){
return a.toothNumber > b.toothNumber ? 1 : (a.toothNumber === b.toothNumber ? 0 : -1 );
});
console.log(json);
你可以这样做
const json = [ { "toothNumber": "01", "name": "John" }, { "toothNumber": "18", "name": "John" }, { "toothNumber": "19", "name": "John" }, { "toothNumber": "17", "name": "John" }, { "toothNumber": "01,32", "name": "John" }, { "toothNumber": "25,32", "name": "John" }, { "toothNumber": "", "name": "John" }, { "toothNumber": "15", "name": "John" }];
json.sort(function(a, b) {
return a.toothNumber.split(",")[0] - b.toothNumber.split(",")[0];
});
console.log(json)
我知道之前有人问过类似的问题,我在这里提到了这个问题:sort json object in javascript 但我仍然找不到问题的答案。所以我走了。我有一个 JSON 对象结构如下:
[
{
"toothNumber": "01",
"name": "John"
},
{
"toothNumber": "18",
"name": "John"
},
{
"toothNumber": "19",
"name": "John"
},
{
"toothNumber": "17",
"name": "John"
},
{
"toothNumber": "01,32",
"name": "John"
},
{
"toothNumber": "25,32",
"name": "John"
},
{
"toothNumber": "",
"name": "John"
},
{
"toothNumber": "15",
"name": "John"
}
]
当我使用下面的代码进行排序时,我没有得到预期的结果:
json.sort(function(a, b){
return a.toothNumber - b.toothNumber;
});
下面是实际结果,不是我想的那样。任何帮助将不胜感激。
实际结果:
[
{
"toothNumber": "",
"name": "John"
},
{
"toothNumber": "01",
"name": "John"
},
{
"toothNumber": "15",
"name": "John"
},
{
"toothNumber": "17",
"name": "John"
},
{
"toothNumber": "18",
"name": "John"
},
{
"toothNumber": "19",
"name": "John"
},
{
"toothNumber": "01,32",
"name": "John"
},
{
"toothNumber": "25,32",
"name": "John"
}
]
预期结果:
[
{
"toothNumber": "",
"name": "John"
},
{
"toothNumber": "01",
"name": "John"
},
{
"toothNumber": "01,32",
"name": "John"
},
{
"toothNumber": "15",
"name": "John"
},
{
"toothNumber": "17",
"name": "John"
},
{
"toothNumber": "18",
"name": "John"
},
{
"toothNumber": "19",
"name": "John"
},
{
"toothNumber": "25,32",
"name": "John"
}
]
按字符串排序,而不是数字比较。
const json = [ { "toothNumber": "01", "name": "John" }, { "toothNumber": "18", "name": "John" }, { "toothNumber": "19", "name": "John" }, { "toothNumber": "17", "name": "John" }, { "toothNumber": "01,32", "name": "John" }, { "toothNumber": "25,32", "name": "John" }, { "toothNumber": "", "name": "John" }, { "toothNumber": "15", "name": "John" }];
json.sort(function(a, b){
return a.toothNumber > b.toothNumber ? 1 : (a.toothNumber === b.toothNumber ? 0 : -1 );
});
console.log(json);
你可以这样做
const json = [ { "toothNumber": "01", "name": "John" }, { "toothNumber": "18", "name": "John" }, { "toothNumber": "19", "name": "John" }, { "toothNumber": "17", "name": "John" }, { "toothNumber": "01,32", "name": "John" }, { "toothNumber": "25,32", "name": "John" }, { "toothNumber": "", "name": "John" }, { "toothNumber": "15", "name": "John" }];
json.sort(function(a, b) {
return a.toothNumber.split(",")[0] - b.toothNumber.split(",")[0];
});
console.log(json)