如何按[1,'A','a']规则对含fName的对象数组排序?
实现对象数组按指定规则排序
问题场景
原始数组:
var arr = [{ fName: "a" }, { fName: 1 }, { fName: "A" }];
需要将其排序为指定顺序:
var arr = [{ fName: 1 }, { fName: "A" }, { fName: "a" }];
排序规则为按[1, 'A', 'a']的优先级排列。
解决方案
通过自定义Array.sort()的比较逻辑实现,核心是给每个目标值分配固定优先级权重:
// 定义排序优先级映射,数字越小越靠前 const sortPriority = { 1: 0, 'A': 1, 'a': 2 }; // 执行排序 arr.sort((itemA, itemB) => { // 获取两个元素的优先级权重,未定义的元素默认排到最后 const weightA = sortPriority[itemA.fName] ?? Infinity; const weightB = sortPriority[itemB.fName] ?? Infinity; return weightA - weightB; });
逻辑说明
- 先创建一个映射对象
sortPriority,把需要排序的fName值对应到不同的优先级数字,数字越小排序越靠前; - 在
sort()的比较函数中,取出两个元素的fName对应的权重,用权重差值决定排序顺序; - 用
?? Infinity处理不在规则内的元素,确保这类元素自动排到数组末尾。
内容的提问来源于stack exchange,提问作者Shreyash Kolhe
相关产品推荐
相关产品推荐

