如何基于对象的数组属性指定下标值对对象数组进行排序
基于对象数组中数组属性指定下标的排序方案
你可以直接在Array.sort()的比较函数中读取arrval对应下标的值做大小比较即可,基础实现如下:
// 按 arrval[1] 升序排序 arr.sort((a, b) => a.arrval[1] - b.arrval[1])
如果需要调整为降序,把两个值的位置互换即可:
// 按 arrval[1] 降序排序 arr.sort((a, b) => b.arrval[1] - a.arrval[1])
如果需要更灵活的通用实现,支持动态指定下标,可以封装为工具函数,同时补充边界兼容逻辑:
/** * 按arrval的指定下标排序 * @param {Array} arr 待排序的对象数组 * @param {Number} index arrval的目标下标 * @param {String} order 排序方向,asc升序/desc降序 * @returns {Array} 排序后的数组 */ function sortByArrvalIndex(arr, index, order = 'asc') { return arr.sort((a, b) => { // 兼容arrval不存在、下标越界的异常场景,异常值默认按0处理 const valA = a.arrval?.[index] ?? 0 const valB = b.arrval?.[index] ?? 0 return order === 'asc' ? valA - valB : valB - valA }) } // 调用示例:按arrval[1]升序排序 const sortedArr = sortByArrvalIndex(arr, 1, 'asc')
以上代码运行后得到的结果和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者Shogun
相关产品推荐
相关产品推荐

