要按多个属性对对象数组进行排序,包括嵌套数组中的对象,可以使用Array.prototype.sort()方法结合自定义的比较函数来实现。
下面是一个示例代码,假设有一个对象数组arr,其中每个对象包含name和age属性,以及一个嵌套的数组nestedArr,其中每个嵌套对象包含score属性。我们将根据name属性进行升序排序,如果name属性相同,则根据age属性进行升序排序,如果age属性相同,则根据nestedArr数组中的第一个对象的score属性进行升序排序。
var arr = [
{ name: 'John', age: 25, nestedArr: [{ score: 80 }, { score: 90 }] },
{ name: 'Alice', age: 30, nestedArr: [{ score: 85 }, { score: 95 }] },
{ name: 'Bob', age: 25, nestedArr: [{ score: 75 }, { score: 85 }] }
];
arr.sort(function(a, b) {
// 按name属性进行升序排序
if (a.name < b.name) return -1;
if (a.name > b.name) return 1;
// 如果name属性相同,按age属性进行升序排序
if (a.age < b.age) return -1;
if (a.age > b.age) return 1;
// 如果age属性相同,按nestedArr数组中第一个对象的score属性进行升序排序
var aScore = a.nestedArr[0].score;
var bScore = b.nestedArr[0].score;
if (aScore < bScore) return -1;
if (aScore > bScore) return 1;
return 0;
});
console.log(arr);
运行以上代码,输出结果如下:
[
{ name: 'Alice', age: 30, nestedArr: [ { score: 85 }, { score: 95 } ] },
{ name: 'Bob', age: 25, nestedArr: [ { score: 75 }, { score: 85 } ] },
{ name: 'John', age: 25, nestedArr: [ { score: 80 }, { score: 90 } ] }
]
可以看到,数组arr按照指定的排序规则进行了排序。