0
我有以下結構:排序對象的數組,其中的關鍵是一個變量
var arrOfObjects = [
{
folder: {id: 2},
children: []
},
{
file: {id: 3},
children: []
},
{
file: {id: 4},
children: []
},
{
folder: {id: 1},
children: []
},
];
而且我想用下面的函數調用來對它進行排序:
sortArrOfObjects(arrOfObjects, {
types: [
['file']
],
index: 'id',
order: 'asc'
});
sortArrOfObjects(arrOfObjects, {
types: [
['folder']
],
index: 'id',
order: 'asc'
});
輸出將被排序數組第一個文件,然後是文件夾,如:
var arrOfObjects = [
{
file: {id: 3},
children: []
},
{
file: {id: 4},
children: []
},
{
folder: {id: 1},
children: []
},
{
folder: {id: 2},
children: []
},
];
所以我有以下功能,調用sort()
數組中的內置函數,並比較給定鍵存在的對象,並跳過其中一個比較器中不存在鍵的迭代。但它不起作用,它似乎排序完全錯誤的順序。怎麼了?
function sortArrayOfObjects(arr, sortBy) {
arr.sort(function (a, b) {
var first = '';
var second = '';
for (var i = 0; i < sortBy.types.length; i++) {
switch (sortBy.types[i].length) {
case 1:
if (a[sortBy.types[i][0]] != undefined) {
first = a[sortBy.types[i][0]][sortBy.index].toString().toLowerCase();
} else {
return;
}
if (b[sortBy.types[i][0]] != undefined) {
second = b[sortBy.types[i][0]][sortBy.index].toString().toLowerCase();
} else {
return;
}
break;
case 2:
// not implemented yet
break;
default:
break;
}
}
if (first > second) {
return (sortBy.order == 'asc') ? 1 : -1;
}
if (first < second) {
return (sortBy.order == 'asc') ? -1 : 1;
}
return 0;
});
};
嗯,你的方式需要更新版本的JavaScript,不是嗎? – reporter
是的,但只有lambda表達式,它足以將它們轉換爲舊版本中的回調。謝謝! – user99999