如何正确排序对象数组?

时间:2018-02-13 04:06:03

标签: javascript arrays json sorting

我似乎在解决一系列对象要正确排序方面遇到了一些问题。

例如,我们说我有以下内容:

var items = [
    {id: '1', itn: '1'},
    {id: '2', itn: '10P'},
    {id: '3', itn: '2'},
    {id: '4', itn: '3'}
];

我需要根据" itn中的值对此数组进行排序。"但是,当我运行下面的函数时,我将其列为1,10P,2,3,而不是1,2,3,10P。

userData.sort(function (a, b) {
    return (b.itn > a.itn) ? -1 : (b.itn < a.itn) ? 1 : 0;
});

我对如何推进此问题感到有些困惑,并且我也不确定要搜索哪种关键字以获得正确的指导。任何帮助表示赞赏!

提前致谢。

2 个答案:

答案 0 :(得分:2)

您似乎正在尝试根据itn中存在的整数部分对数组进行排序。为此,您可以使用parseInt()将项目(itn)转换为整数,然后比较这些整数值:

var userData = [
    {id: '1', itn: '1'},
    {id: '1', itn: '10P'},
    {id: '1', itn: '2'},
    {id: '1', itn: '3'}
];

var res = userData.sort(function (a, b) {
    a = parseInt(a.itn);
    b = parseInt(b.itn);
    return (b > a) ? -1 : (b < a) ? 1 : 0;
});
console.log(res)

答案 1 :(得分:0)

您可以将string#localeCompare numeric属性用作true

&#13;
&#13;
var items = [{id: '1', itn: '1'},{id: '1', itn: '10P'},{id: '1', itn: '2'},{id: '1', itn: '3'}];
items.sort((a,b) => a.itn.localeCompare(b.itn, undefined, {numeric: true}));
console.log(items);
&#13;
&#13;
&#13;