gpt4 book ai didi

javascript - 下划线按表示节号的字符串排序

转载 作者:行者123 更新时间:2023-11-29 19:46:15 25 4
gpt4 key购买 nike

[
{name:"foo", value:"1", order:"1.1.12"},
{name:"foo bar", value:"2", order:"2.10.1"},
{name:"bar", value:"3", order:"1.11.5"},
{name:"baz", value:"4", order:"2.6.2"},
{name:"foo baz", value:"5", order:"1.3.10"}
]

如何在 underscore.js(或不使用)的帮助下按 order 对列表进行排序。所以我会这样结束:

[
{name:"a", value:"1", order:"1.1.12"},
{name:"a", value:"5", order:"1.3.10"},
{name:"a", value:"3", order:"1.11.5"},
{name:"a", value:"4", order:"2.6.2"},
{name:"a", value:"2", order:"2.10.1"}
]

值得一提的是,order 可以是任意长度的数字,例如:

1.1
2
3.1.2.3

因此解决方案必须尽可能通用。

最佳答案

您可以将字符串拆分为一个数字数组并比较相同位置的数字,直到发现不同的数字:

var arr = [
{name:"foo", value:"1", order:"1.1.12"},
{name:"foo bar", value:"2", order:"2.10.1"},
{name:"bar", value:"3", order:"1.11.5"},
{name:"baz", value:"4", order:"2.6.2"},
{name:"foo baz", value:"5", order:"1.3.10"},
{name:"foo baz", value:"5", order:"1.3"},
{name:"foo baz", value:"5", order:"2"}
];


arr.sort(function(item1, item2){
var split1 = item1.order.split('.');
var split2 = item2.order.split('.');
var length = Math.min(split1.length, split2.length);
for (var i=0; i<length; i++){
if (+split1[i] < +split2[i])
return -1;
if (+split1[i] > +split2[i])
return 1;
}
return split1.length - split2.length;

});

console.log(arr);

PS:纯JS方案,不使用Underscore。

关于javascript - 下划线按表示节号的字符串排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19405939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com