一个数据筛选排序算法

一个数据筛选算法

已知:

有一个任务数据列表
每个任务的数据中都存在两个字段task_id,和if_sender
task_id表示任务ID,if_sender表示任务是发起者任务还是接收者任务,分别取值’1’和‘0’
发起者任务的task_id可以与接受者相同
但发起者之间task_id不相同,接受者之间task_id不相同

目标:

对数组进行重新排列,在不该变原来大体顺序对情况下,将主任务放到task_id相同的子任务后面。

方法1.
进行三次循环
第一次找出有相同id的子任务Id并记录下来
第二次取出记录下来的有子任务id对应的主任务数据
第三次在原数组中的复合条件的子任务后面插入对应的主任务数据,并且删除原位置的主任务数据(删除原位置的主任务比较麻烦)

上面的方法比较笨,至少要循环三次数据,数据量多的情况下肯定效率爆炸

方法2.
第一次循环将所有数据以id为key存入一个新数组B,key对应的data是所有带有这个id的数据的一个数组(在向某id对应的数组中存入数据的时候要尽兴判断,如果是接收者任务就从输入头部插入数据,否则从数组尾部插入数据)
第二次循环判断原数组中的每一个元素的id在新数组B中对应的数组的长度,如果长度为1证明它没有与它相同id的数据,存入新数组C中,如果长度大于1并且该元素为接受者任务,就把该任务id对应的数据解构后放入新数组C中。
循环结束后数组C就是已经排序好的数据

方法2的代码如下:

 /**
     * 将主任务和其从其下发的任务绑定(按照子任务,主任务的顺序排序)
     */
    bindMainTaskandSubTask(data) {
   
      let _taskList = [];
      let _mainTaskList = [];
      // 将相同task_id的数据存入一个数组中并一task_id为索引
      data.forEach(item => {
   
        if(_mainTaskList[item.task_id]){
   
          if(item.if_sender === 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值