要按多个属性对对象数组进行排序,包括嵌套数组中的对象,可以使用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
按照指定的排序规则进行了排序。