我有一些可以采用以下格式的数据,
let items = [
{
number: "1"
},
{
number: "5"
},
{
number: "3,1"
},
{
number: "3,11"
},
{
number: "3,3"
},
{
number: "3,2"
}
]
我希望能够按照以下优先级进行排序...1.按“数字”值1.在“ number”中可能的逗号左边的第一个“列”2.通过“数字”字段中可能的逗号右边的任何字符]
因此,我希望看到“ 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”,这很接近但不太正确。关于如何有效解决此问题的任何想法? (我知道我可以在下划线中链接排序)我不是不喜欢下划线,也可以使用香草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);
编辑:这是数字排序的解决方案,我误解了原始问题并提供了错误的解决方案。
不需要任何库
// first let's remove that object thing, go through items and
// replace commas with dots also parse them as float
numbers = items.map(item => parseFloat(item.number.replace(',', '.')))
// then just call normal array sort
numbers.sort()
// if you really want back strings with commas instead of
// dots, replace them back
numbers.map(number => number.toString().replace('.',','))
// outputs
// ["1", "3,1", "3,11", "3,2", "3,3", "5"]
您可以选择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);