对以逗号分隔的数字字符串进行排序
Sorting comma-separated strings of number
我有一些数据可以是以下格式,
let items = [
{
number: "1"
},
{
number: "5"
},
{
number: "3,1"
},
{
number: "3,11"
},
{
number: "3,3"
},
{
number: "3,2"
}
]
我希望能够按照以下优先顺序对其进行排序...
1.通过'number'值
1. 'number' 中可能逗号左侧的第一个 "column"
2. 'number' 字段
中可能逗号右边的任何内容
因此,我希望看到“1”、“3,1”、“3,2”、“3,3”、“3,11”、“5”
我使用下划线进行排序并得出以下结果。
items = _.sortBy(items, function(item) {
let sort = item.number;
if (item.number.indexOf(",") != -1) {
const split = item.number.split(",");
sort = parseInt(split[0]);
}
return sort;
});
items = _.sortBy(items, function(item) {
let sort = item.number;
if (item.number.indexOf(",") != -1) {
const split = item.number.split(",");
sort = parseInt(split[1]);
}
return sort;
});
console.log(items);
这给了我 "1" , "3,1", "3,2", "3,3", "5", "3,11" 这很接近但不太正确。关于如何有效解决这个问题的任何想法? (我知道我可以用下划线链接排序)我不偏爱下划线,也可以使用 vanilla JS
你可以选择 localeCompare
和选项
let items = [{ number: "1" }, { number: "5" }, { number: "3,1" }, { number: "3,11" }, { number: "3,3" }, { number: "3,2" }];
items.sort(function (a,b) {
return a.number.localeCompare(b.number, undefined, { numeric: true, sensitivity: 'base' });
});
console.log(items);
或取拆分值的增量。
let items = [{ number: "1" }, { number: "5" }, { number: "3,1" }, { number: "3,11" }, { number: "3,3" }, { number: "3,2" }];
items.sort(function (a,b) {
var aa = a.number.split(','),
bb = b.number.split(',');
return aa[0] - bb[0] || (aa[1] || -Infinity) - (bb[1] || -Infinity);
});
console.log(items);
我有一些数据可以是以下格式,
let items = [
{
number: "1"
},
{
number: "5"
},
{
number: "3,1"
},
{
number: "3,11"
},
{
number: "3,3"
},
{
number: "3,2"
}
]
我希望能够按照以下优先顺序对其进行排序... 1.通过'number'值 1. 'number' 中可能逗号左侧的第一个 "column" 2. 'number' 字段
中可能逗号右边的任何内容因此,我希望看到“1”、“3,1”、“3,2”、“3,3”、“3,11”、“5”
我使用下划线进行排序并得出以下结果。
items = _.sortBy(items, function(item) {
let sort = item.number;
if (item.number.indexOf(",") != -1) {
const split = item.number.split(",");
sort = parseInt(split[0]);
}
return sort;
});
items = _.sortBy(items, function(item) {
let sort = item.number;
if (item.number.indexOf(",") != -1) {
const split = item.number.split(",");
sort = parseInt(split[1]);
}
return sort;
});
console.log(items);
这给了我 "1" , "3,1", "3,2", "3,3", "5", "3,11" 这很接近但不太正确。关于如何有效解决这个问题的任何想法? (我知道我可以用下划线链接排序)我不偏爱下划线,也可以使用 vanilla JS
你可以选择 localeCompare
和选项
let items = [{ number: "1" }, { number: "5" }, { number: "3,1" }, { number: "3,11" }, { number: "3,3" }, { number: "3,2" }];
items.sort(function (a,b) {
return a.number.localeCompare(b.number, undefined, { numeric: true, sensitivity: 'base' });
});
console.log(items);
或取拆分值的增量。
let items = [{ number: "1" }, { number: "5" }, { number: "3,1" }, { number: "3,11" }, { number: "3,3" }, { number: "3,2" }];
items.sort(function (a,b) {
var aa = a.number.split(','),
bb = b.number.split(',');
return aa[0] - bb[0] || (aa[1] || -Infinity) - (bb[1] || -Infinity);
});
console.log(items);