JavaScript中如何让两个关联对象数组按相同规则同步排序
实现方案
核心逻辑是先保留两个数组的原始索引关联,排序后再根据索引同步重组两个数组,具体代码如下:
// 生成携带原始索引的临时数组 const indexArr = firstArray.map((val, idx) => ({ idx, date: val.date })) // 按date降序排序临时数组(排序逻辑和你原有逻辑完全一致) indexArr.sort((a, b) => new Date(b.date) - new Date(a.date)) // 同步生成排序后的两个数组 firstArray = indexArr.map(item => firstArray[item.idx]) secondArray = indexArr.map(item => secondArray[item.idx])
原理解释
直接对firstArray排序会丢失原始索引的对应关系,导致你无法知道排序后的元素原本对应的secondArray位置。上面的方案先把每个元素的原始索引和排序依据的date值绑定在一起排序,排序完成后再按排序后的索引分别提取两个数组的元素,就能保证二者的关联关系完全不变,整体时间复杂度和原生数组排序一致,性能表现优异。
内容的提问来源于stack exchange,提问作者Kayo
相关产品推荐
相关产品推荐

