如何基于存储位置的数组对关联groupName的另一数组排序
根据关联字段按指定位置排序数组
要实现用存储位置信息的数组(array1)对目标数组(array2)排序,核心思路是先建立groupName与position的映射关系,再利用这个映射对array2排序,具体步骤如下:
- 第一步:将array1转换为以
groupName为键、position为值的映射对象,这样可以快速查询任意groupName对应的位置,避免排序时重复遍历array1,提升效率。 - 第二步:调用数组的
sort方法,通过映射对象获取两个元素对应的position值,以此作为排序依据。
完整代码示例
const array1 = [ {groupName: "test", position: 0}, {groupName: "test2", position: 1}]; const array2 = [ {groupName: "test2", otherValue: 10}, {groupName: "test", otherValue: 20}]; // 生成groupName到position的映射表 const positionMap = array1.reduce((map, item) => { map[item.groupName] = item.position; return map; }, {}); // 对array2排序,不修改原数组 const sortedArray = [...array2].sort((a, b) => { return positionMap[a.groupName] - positionMap[b.groupName]; }); console.log(sortedArray); // 输出结果:[{groupName: "test", otherValue: 20}, {groupName: "test2", otherValue: 10}]
说明:使用[...array2]创建原数组的副本,避免排序操作直接修改原array2;如果允许修改原数组,也可以直接调用array2.sort(...)。
内容的提问来源于stack exchange,提问作者Adi
相关产品推荐
相关产品推荐

