使用数组 for 循环的方式,对数组内的对象按照多项要求进行排序
举个例子, 现在有个对象数组,我们现根据名字进行排序,如果名字相同,再根据年纪进行排序,都为升序:
const arr = [
{name: "Lisa", age: "26"},
{name: "Mike", age: "21"},
{name: "Lisa", age: "27"},
{name: "Lily", age: "19"},
]
for (let i = arr.length - 1; i >= 0; i--) {
for (let j = 0; j < i; j++) {
// 根据名字进行排序
if (arr[j + 1].name < arr[j].name) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
// 如果名字相同,根据年纪进行排序
} else if (arr[j + 1].name === arr[j].name) {
if (Number(arr[j + 1].age) < Number(arr[j].age)) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
}
console.log(arr); // 输出结果如下图
这里需要提醒两点:
- 单词的比较是按照字符串比较的方式,即单个字母逐个做比较,例如 “Lily” 和 “Lisa”,先比较 “L”,然后比较 “i”, 接着比较 “l” 和 “s”;
- 此外可以看到年龄这个属性是字符串类型,如果直接比较大小,会按照字符串的比较方式,也就是每个数字的大小进行比较,例如 “2” > “11”, 因为 2 > 1, 所以需要先强制转换成数字类型,再进行比较。