如何根据对象内部数组的car year对对象数组进行排序
根据对象内部数组的车辆年份排序对象数组
首先得明确你想基于数组里的哪辆车的年份来排序——是每个对象里最新的车辆年份、最老的,还是数组中某一个特定位置的车?下面给你几种常见场景的实现方法:
1. 按每个对象里最新的车辆年份排序(降序/升序)
如果想让拥有最新车辆的对象排在前面,我们可以先提取每个对象里cars数组的最大年份,再用这个值做比较:
升序(最老的在前)
const sortedByOldestCar = people.sort((a, b) => { // 获取a对象里的最大车年份 const maxYearA = Math.max(...a.cars.map(car => car.year)); // 获取b对象里的最大车年份 const maxYearB = Math.max(...b.cars.map(car => car.year)); // 升序:小的在前 return maxYearA - maxYearB; });
降序(最新的在前)
只需要把比较结果反过来:
const sortedByNewestCar = people.sort((a, b) => { const maxYearA = Math.max(...a.cars.map(car => car.year)); const maxYearB = Math.max(...b.cars.map(car => car.year)); return maxYearB - maxYearA; });
2. 按每个对象里最老的车辆年份排序
类似上面的逻辑,只是把Math.max换成Math.min:
const sortedByEarliestCar = people.sort((a, b) => { const minYearA = Math.min(...a.cars.map(car => car.year)); const minYearB = Math.min(...b.cars.map(car => car.year)); // 升序:最老的在前 return minYearA - minYearB; });
3. 按对象里cars数组的第一个车辆年份排序
如果你的需求是固定用每个对象里第一辆车的年份来排序,直接取数组索引0即可:
const sortedByFirstCarYear = people.sort((a, b) => { return a.cars[0].year - b.cars[0].year; });
注意事项
sort()方法会修改原数组,如果不想改变原数组,先创建一个副本再排序:const sortedArray = [...people].sort(/* 比较函数 */);- 要确保每个对象的
cars数组都不为空,且每个car都有year属性,避免出现NaN导致排序异常。如果有不确定的情况,可以加个默认值处理:const maxYearA = Math.max(...a.cars.map(car => car.year || 0));
内容的提问来源于stack exchange,提问作者Luxor
相关产品推荐
相关产品推荐

