我正在尝试为下面的对象数组做多级升序排序。
null
var array = [{id: 1, color: 'red', objname: 'tomato'},
{id: 1, color: 'orange', objname: 'pumpkin'},
{id: 2, color: 'red', objname: 'tomato' },
{id: 1, color: 'red', objname: 'cherry' },
{id: 1, color: 'orange', objname: 'sunset'}];
Expected result Array:
var resultArray =
[{id: 1, color: 'orange', objname: 'pumpkin'},
{id: 1, color: 'orange', objname: 'sunset'},
{id: 1, color: 'red', objname: 'cherry'},
{id: 1, color: 'red', objname: 'tomato'},
{id: 2, color: 'red', objname: 'tomato'}];
null
从上面的对象数组,首先我想排序的‘id’级别和颜色,最后是objname。 第一级基于id,我可以做,但在多级,我没有想法排序。 这就是我对一级的排序,
null
sortById(array, key) {
return array.sort(function(a, b) {
var x = a[key]; var y = b[key];
return ((x < y) ? -1 : ((x > y) ? 1 : 0));
});
}
null
有了这个,我可以升序数组的对象基于“id”。 有谁可以帮助我,我们怎样才能执行多级排序。
您可以使用多个或
条件对其进行排序
:
null
var array = [{id: 1, color: 'red', objname: 'tomato'},{id: 1, color: 'orange', objname: 'pumpkin'},{id: 2, color: 'red', objname: 'tomato' },{id: 1, color: 'red', objname: 'cherry' },{id: 1, color: 'orange', objname: 'sunset'}];
var resultArray = array.sort((a,b)=>{
return a.id-b.id || a.color.localeCompare(b.color) || a.objname.localeCompare(b.objname)
});
console.log(resultArray);
您可以采取一种动态方法,收集所需的键,并使用array#some
和truthy值的短路。
null
var array = [{ id: 1, color: 'red', objname: 'tomato' }, { id: 1, color: 'orange', objname: 'pumpkin' }, { id: 2, color: 'red', objname: 'tomato' }, { id: 1, color: 'red', objname: 'cherry' }, { id: 1, color: 'orange', objname: 'sunset' }],
keys = ['id', 'color', 'objname'];
array.sort((a, b) => {
var result;
keys.some(k => result = (a[k] > b[k]) - (a[k] < b[k]));
return result;
});
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
你可以试试这样的。
var array = [{id: 1, color: 'red', objname: 'tomato'},
{id: 1, color: 'orange', objname: 'pumpkin'},
{id: 2, color: 'red', objname: 'tomato' },
{id: 1, color: 'red', objname: 'cherry' },
{id: 1, color: 'orange', objname: 'sunset'}];
array.sort((a, b) => {
if (a.city === b.city) {
if(a.color === b.color) {
return (a.objname).localeCompare(b.objname)
}
return (a.color).localeCompare(b.color)
}
return a.id - b.id
}
);
console.log(array);