JavaScript如何基于另一数组的顺序对对象数组进行排序
数组排序实现方案
首先请先确认两边heading的匹配规则:你给出的示例中arrayB的后两项值带空格(heading 3、heading 4),而arrayA对应heading属性不带空格,如果是手误输入导致的不一致,先统一两边的命名格式,再按以下逻辑排序:
方案1:预先生成索引映射(推荐,适配长数组场景)
先把arrayB的元素和对应下标存为映射表,排序时直接查表获取优先级,整体时间复杂度为O(n log n),避免了排序过程中重复遍历arrayB查找下标,尤其适合你提到的业务侧数组长度较长的情况:
// 生成heading到排序优先级的映射表 const orderMap = new Map(arrayB.map((item, index) => [item, index])) // 对arrayA按映射表的优先级排序 arrayA.sort((a, b) => orderMap.get(a.heading) - orderMap.get(b.heading))
方案2:直接用indexOf排序(适合短数组,写法简洁)
如果数组长度不大,可以直接用indexOf获取对应下标排序,写法更简单:
arrayA.sort((a, b) => arrayB.indexOf(a.heading) - arrayB.indexOf(b.heading))
空格差异兼容处理
如果业务场景中arrayB确实带空格、arrayA不带,排序时统一格式化字符串即可:
// 生成映射时统一去掉所有空格,匹配时自动对齐格式 const orderMap = new Map(arrayB.map((item, index) => [item.replaceAll(' ', ''), index])) arrayA.sort((a, b) => orderMap.get(a.heading) - orderMap.get(b.heading))
排序完成后遍历arrayA输出的元素顺序就和arrayB完全一致。
内容的提问来源于stack exchange,提问作者Meep Moop Sbap
相关产品推荐
相关产品推荐

