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

导读:本篇文章讲解 javascript 一个数组按照另一个数组排序 Array, 需要排序数组个数不固定,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

项目需求:

二级部门按指定的顺序:[‘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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!