Javascript:按三个值对对象数组进行排序
我有一个要使用.sort()函数排序的对象数组。应按三个值进行排序(首先按第一个值排序,然后按第二个值排序,最后按第三个值排序)。 我试过下面的方法,但似乎不能正常工作Javascript:按三个值对对象数组进行排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有一个要使用.sort()函数排序的对象数组。应按三个值进行排序(首先按第一个值排序,然后按第二个值排序,最后按第三个值排序)。 我试过下面的方法,但似乎不能正常工作 myArray.sort(function(a,b) { if (a.Value1 === b.Value1) { if (a.Value2 === b.Value2) { return (a.Value3 < b.Value3) ? -1 : (a.Value3 &g
myArray.sort(function(a,b) {
if (a.Value1 === b.Value1) {
if (a.Value2 === b.Value2) {
return (a.Value3 < b.Value3) ? -1 : (a.Value3 > b.Value3) ? 1 : 0;
} else {
return (a.Value2 < b.Value2) ? -1 : 1;
}
} else {
if (a.Value2 === b.Value2) {
return(a.Value1 < b.Value1) ? -1 : 1;
} else {
return (a.Value2 < b.Value2) ? -1 : 1;
}
}
});
myArray.sort(函数(a,b){
如果(a.Value1==b.Value1){
如果(a.Value2==b.Value2){
返回值(a.Value3b.Value3)?1:0;
}否则{
返回值(a.Value2
任何帮助都将不胜感激。这基本上是好的,但在一个小案例中,您把逻辑搞乱了,
a.Value1!==b、 值1
这里有一个固定版本:
myArray.sort(function(a,b) {
if (a.Value1 === b.Value1) {
if (a.Value2 === b.Value2) {
return (a.Value3 < b.Value3) ? -1 : (a.Value3 > b.Value3) ? 1 : 0;
} else {
return (a.Value2 < b.Value2) ? -1 : 1;
}
} else {
return (a.Value1 < b.Value1) ? -1 : 1;
}
});
myArray.sort(函数(a,b){
如果(a.Value1==b.Value1){
如果(a.Value2==b.Value2){
返回值(a.Value3b.Value3)?1:0;
}否则{
返回值(a.Value2
myArray.sort(函数(a,b){
函数getResult(第一,第二){
返回(第一次<第二次)?-1:(第一次>第二次)?1:0;
}
如果(a.Value1!==b.Value1)返回getResult(a.Value1,b.Value1);
如果(a.Value2!==b.Value2)返回getResult(a.Value2,b.Value2);
返回getResult(a.Value3,b.Value3);
});
为什么这么复杂?试试这个:
myArray.sort(function(a,b) {
if(a.Value1 !== b.Value1) return (a.Value1 < b.Value1) ? -1 : 1;
if(a.Value2 !== b.Value2) return (a.Value2 < b.Value2) ? -1 : 1;
return (a.Value3 < b.Value3) ? -1 : 1;
});
myArray.sort(函数(a,b){
如果(a.Value1!==b.Value1)返回(a.Value1
对我来说,这更有效、更可读。另一方面,它适用于任意数量的字段
List.sort(function (a, b) {
var keyA = a.Field1;
var keyB = b.Field1;
if (keyA > keyB) return -1;
if (keyA < keyB) return 1;
keyA = a.Field2;
keyB = b.Field2;
if (keyA > keyB) return -1;
if (keyA < keyB) return 1;
keyA = a.Field3;
keyB = b.Field3;
if (keyA > keyB) return -1;
if (keyA < keyB) return 1;
//You can repeat this for any number of fields
return 0;
});
List.sort(函数(a,b){
var-keyA=a.Field1;
var-keyB=b.Field1;
如果(keyA>keyB)返回-1;
if(keyAkeyB)返回-1;
if(keyAkeyB)返回-1;
if(keyA
为什么要在else
语句中检查Value2
<如果Value1
已经不同,则code>Value2不会影响订单。
List.sort(function (a, b) {
var keyA = a.Field1;
var keyB = b.Field1;
if (keyA > keyB) return -1;
if (keyA < keyB) return 1;
keyA = a.Field2;
keyB = b.Field2;
if (keyA > keyB) return -1;
if (keyA < keyB) return 1;
keyA = a.Field3;
keyB = b.Field3;
if (keyA > keyB) return -1;
if (keyA < keyB) return 1;
//You can repeat this for any number of fields
return 0;
});