use*_*434 9 javascript arrays sorting
我有一个对象数组:
var arr = [
{title:'50 - 50'},
{title:'100 - 100'},
{title:'50 - 65'},
{title:'100 - 125'}
];
Run Code Online (Sandbox Code Playgroud)
我正在尝试对此数组进行排序,以便项目按以下顺序显示:
var arr = [
{title:'50 - 50'},
{title:'50 - 65'},
{title:'100 - 100'},
{title:'100 - 125'}
];
Run Code Online (Sandbox Code Playgroud)
目前我正在使用以下排序功能来尝试这个:
arr.sort(function(a, b){
var titleA = a.title;
var titleB = b.title;
var arrA = titleA.split(' - ');
var arrB = titleB.split(' - ');
var keyA = parseInt(arrA[0]),
keyB = parseInt(arrB[0]);
// Compare the 2 keys
if(keyA < keyB) return -1;
if(keyA > keyB) return 1;
return 0;
});
Run Code Online (Sandbox Code Playgroud)
但是,这将按以下顺序返回项目:
var arr = [
{title:'50 - 65'},
{title:'50 - 50'},
{title:'100 - 125'},
{title:'100 - 100'}
];
Run Code Online (Sandbox Code Playgroud)
看起来我需要按标题中的第一个数字排序,然后按第二个数字排序.有任何想法吗?
Ale*_*hov 10
试试这个:
arr.sort(function(a, b){
var titleA = a.title;
var titleB = b.title;
var arrA = titleA.split(' - ');
var arrB = titleB.split(' - ');
var keyA1 = parseInt(arrA[0]), keyA2 = parseInt(arrA[1])
keyB1 = parseInt(arrB[0]), keyB2 = parseInt(arrB[1]);
// Compare the 2 keys
if (keyA1 < keyB1) return -1;
if (keyA1 > keyB1) return 1;
if (keyA2 < keyB2) return -1;
if (keyA2 > keyB2) return 1;
return 0;
});
Run Code Online (Sandbox Code Playgroud)
mes*_*azs 10
在伪代码中,逻辑如下:
程序:比较器(a,b)
a < b那么return -1a = b然后comparator(a1, b1)递归调用,其中a1和b1是排序中下一级别的可比较值.a > b那么return 1在具体案例中,您可以通过稍微修改代码来做到这一点:
if (keyA < keyB) {
return -1;
} else if (keyA > keyB) {
return 1;
} else { // keyA == keyB
if (titleA < titleB) {
return -1;
} else if (title > titleB) {
return 1;
} else {
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个更简洁的版本,不需要一堆嵌套的if/else情况:
const sorted = arr.sort((a,b) => {
const [a1, a2] = a.title.split(' - ').map(Number);
const [b1, b2] = b.title.split(' - ').map(Number);
return a1 - b1 || a2 - b2;
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13274 次 |
| 最近记录: |