仅使用sort函数按指定数组顺序对目标数组元素排序实现问题
数组自定义排序实现
需求说明
现有两个数组parameter和order,需要对parameter排序满足以下规则:
- 所有在
order中存在的元素,优先按照order里的先后顺序排列 - 剩余未出现在
order中的元素,按词法顺序排在后面 - 排序过程中不能直接使用
order数组参与逻辑判断,仅允许使用sort函数实现
实现方案
提前把order数组的元素和对应索引存入Map对象作为权重映射,排序过程中仅通过该Map判断优先级,避免直接操作order数组,完全符合要求。
具体代码如下:
let parameter = ['Door', 'fjjfh','Container Number','jdjfr', 'Cases', 'hello', "hi", 'Items/sort'] let order = ['Door', 'Container Number', 'Cases', 'Items/sort'] // 提前生成权重映射,排序过程不再使用order数组 const weightMap = new Map() order.forEach((item, index) => weightMap.set(item, index)) // 仅使用sort函数完成所有排序逻辑 parameter.sort((a, b) => { const weightA = weightMap.has(a) ? weightMap.get(a) : Infinity const weightB = weightMap.has(b) ? weightMap.get(b) : Infinity // 两个元素都在order内,按权重升序排列 if (weightA !== Infinity && weightB !== Infinity) { return weightA - weightB } // 单个元素在order内,排在前面 if (weightA !== Infinity) return -1 if (weightB !== Infinity) return 1 // 两个元素都不在order内,按词法排序 return a.localeCompare(b) }) console.log(parameter) // 输出结果:['Door', 'Container Number', 'Cases', 'Items/sort','fjjfh','hello','hi','jdjfr']
内容的提问来源于stack exchange,提问作者rishabh tripathi
相关产品推荐
相关产品推荐

