项目需求:
二级部门按指定的顺序:[‘PD’, ‘EE’, ‘AE’, ‘RF’, ‘HWTE’, ‘RD’, ‘MSG’] 显示信息,
但是二级部门不一定所有的职能部门都有,也有可能真实的部门个比这个多。
这个涉及Array 交集并集运算,逻辑是:
- 先以上面指定顺序与真实数据做交集,得到指定顺序并真实存在的部门队列。
- 然后得到交集队列再与原始数据做差集
- 最后交集结果与差集结果做并集,真实部门不在队列的直接放在队列后面,做到一个都不能少。也一个都不能多。
let columns2 = [
"MSG",
"AE",
"RD",
"PKG",
"OPTIC",
"EE",
"HWTE",
"SW",
"RF",
"PM"
]
//部门交集
let dep_order = ['PD', 'EE', 'AE', 'RF', 'HWTE', 'RD', 'MSG']
function relativeSortArray1(originlist, squencelist) {
//一个数组按照另一个数组排序: originlist按照squencelist排序,不在squencelist的放在后面
// originlist = ['MSG', 'AE', 'RD', 'PD', 'PKG', 'OPTIC', 'EE', 'HWTE', 'SW', 'RF', 'PM'] //需要排序的队列
// squencelist = ['PD', 'EE', 'AE', 'RF', 'HWTE', 'RD', 'MSG'] //已经定好顺序的队列
let intersection, differenceNew, union
console.log(originlist)
let dep_order_set = new Set(squencelist)
let columns2_set = new Set(originlist)
let intersection_set = new Set(squencelist.filter(v => columns2_set.has(v)))
intersection = Array.from(intersection_set)
console.log('部门交集', intersection);
differenceNew = Array.from(new Set(originlist.concat(intersection).filter(v => columns2_set.has(v) && !intersection_set.has(v))))
console.log('部门差集', differenceNew);
union = Array.from(new Set(intersection.concat(differenceNew)));
console.log('部门指定顺序排列:', union)
return union
}
relativeSortArray1(columns2, dep_order)
输出结果:
指定顺序队列:
let dep_order = [‘PD’, ‘EE’, ‘AE’, ‘RF’, ‘HWTE’, ‘RD’, ‘MSG’]
需要按上面顺序排列的队列:
columns2 = [ “MSG”,”AE”, “RD”,”PKG”, “OPTIC”, “EE”, “HWTE”, “SW”, “RF”, “PM”]
执行之后输出结果:
[ ‘EE’, ‘AE’, ‘RF’, ‘HWTE’, ‘RD’, ‘MSG’, ‘PKG’, ‘OPTIC’, ‘SW’, ‘PM’]
(’PD’在指定顺序,不在真实数据里, 排序之后真实数据也不会多,‘PM’在真实数据里不在指定顺序,那放在后面。)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/101556.html