javascript 一个数组按照另一个数组排序 Array, 需要排序数组个数不固定

项目需求:

二级部门按指定的顺序:['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’在真实数据里不在指定顺序,那放在后面。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值