You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于多优先级参考数组对JavaScript目标字符串数组排序

按多参考数组优先级排序目标数组的实现方法

问题背景

现有三个定义排序规则的参考数组:

arr1 = ['ab', 'bc', 'ca', 'ac']
arr2 = ['lm', 'mn', 'ml']
arr3 = ['ij', 'kj', 'pr']

需对目标数组myArray按arr1 > arr2 > arr3的优先级排序,目标数组中每个字符串的前2位匹配arr1元素,中间2位匹配arr2元素,最后2位匹配arr3元素:

myArray = ['acmnkj', 'bcmlij', 'camnij', 'bcmnij']

期望排序结果:['bcmnij', 'bcmlij', 'camnij', 'acmnkj']

实现思路

核心逻辑是将每个参考数组的元素映射为对应的索引(索引越小优先级越高),然后为目标数组的每个字符串生成一个排序三元组:(前2位在arr1的索引, 中间2位在arr2的索引, 最后2位在arr3的索引),利用sorted函数按三元组升序排列即可满足优先级要求。

代码实现

# 定义参考数组
arr1 = ['ab', 'bc', 'ca', 'ac']
arr2 = ['lm', 'mn', 'ml']
arr3 = ['ij', 'kj', 'pr']

# 创建元素到索引的映射字典,提升查询效率
rank_map1 = {item: idx for idx, item in enumerate(arr1)}
rank_map2 = {item: idx for idx, item in enumerate(arr2)}
rank_map3 = {item: idx for idx, item in enumerate(arr3)}

# 目标数组
myArray = ['acmnkj', 'bcmlij', 'camnij', 'bcmnij']

# 按优先级排序
sorted_result = sorted(myArray, key=lambda s: (
    rank_map1[s[:2]],   # 优先级1:前2位对应arr1的索引
    rank_map2[s[2:4]],  # 优先级2:中间2位对应arr2的索引
    rank_map3[s[4:]]    # 优先级3:最后2位对应arr3的索引
))

print(sorted_result)
# 输出:['bcmnij', 'bcmlij', 'camnij', 'acmnkj']

关键说明

  1. 映射字典的优势:使用字典存储元素与索引的对应关系,查询效率为O(1),远高于直接调用arr.index(item)的O(n)遍历查询,适合参考数组较大的场景。
  2. 排序三元组的作用:Python中元组比较会按顺序逐个元素对比,完全符合arr1 > arr2 > arr3的优先级规则——先比较arr1对应的索引,相同则比较arr2,最后比较arr3。

内容的提问来源于stack exchange,提问作者StaticName

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 21:20:33