如何在生成CSV前对对象数组排序:将含n/a项后置
解决数组排序:将含
n/a的条目后置 嘿,我来帮你搞定这个排序需求!核心思路是利用数组的sort()方法,通过给不同状态的条目分配优先级,让**company和position都不为n/a**的条目排在最前面,部分字段为n/a的次之,两个字段全是n/a的排在最后。
实现代码示例
假设你的对象数组叫dataArray,每个元素包含company和position字段,直接用下面的代码就能完成排序:
const sortedArray = dataArray.sort((a, b) => { // 定义优先级计算函数:字段越完整,优先级越高 const calculatePriority = (item) => { const hasValidCompany = item.company !== 'n/a'; const hasValidPosition = item.position !== 'n/a'; if (hasValidCompany && hasValidPosition) return 2; // 两个字段都有效 if (hasValidCompany || hasValidPosition) return 1; // 至少一个字段有效 return 0; // 两个字段都是n/a }; const priorityA = calculatePriority(a); const priorityB = calculatePriority(b); // 让优先级高的条目排在前面 return priorityB - priorityA; });
简化版(仅区分“全有效”和“含n/a”)
如果你的需求是只要company或position有一个是n/a,就把条目排在后面,可以用更简洁的逻辑:
const sortedArray = dataArray.sort((a, b) => { // 判断条目是否两个字段都有效 const isFullValid = (item) => item.company !== 'n/a' && item.position !== 'n/a'; const aIsValid = isFullValid(a); const bIsValid = isFullValid(b); // 有效条目前置,无效后置;同级别保持原顺序(稳定排序) if (aIsValid && !bIsValid) return -1; if (!aIsValid && bIsValid) return 1; return 0; });
进阶:同优先级条目再排序
如果需要同优先级的条目(比如两个字段都有效的)再按其他字段排序(比如company名称),可以在return 0的位置补充逻辑:
return 0 || a.company.localeCompare(b.company);
这段代码会先按优先级排序,优先级相同的再按company字段的字母顺序排序。
内容的提问来源于stack exchange,提问作者Rahul shukla
相关产品推荐
相关产品推荐

