【问题标题】:How do you sort an array of objects properly?如何正确排序对象数组?
【发布时间】:2018-02-13 04:06:03
【问题描述】:

我似乎在让一组对象正确排序时遇到了一点问题。

例如,假设我有以下内容:

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;
});

我有点不知道该如何继续下去,也不确定要搜索什么样的关键字才能获得正确的指导。任何帮助表示赞赏!

提前致谢。

【问题讨论】:

  • 如果&lt; 的两个参数都是字符串,它会按字典顺序进行比较; "10P""2" 之前就像 "aardvark""b" 之前一样。 parseInt 如果你想进行数字比较。
  • 请注意,这是一个对象数组,而不是多维数组。

标签: javascript arrays json sorting


【解决方案1】:

您似乎正在尝试根据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)

【讨论】:

  • 次要:使用一元运算符+,即+'123'也会将String解析为整个Number
【解决方案2】:

您可以将string#localeComparenumeric 属性一起用作true

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);

【讨论】:

    猜你喜欢
    • 2018-04-21
    • 2021-07-05
    • 2018-08-23
    • 2019-12-11
    • 1970-01-01
    • 2014-04-21
    • 2021-12-04
    相关资源
    最近更新 更多