如何把数组內 特定元素放到第一个

假设有一个数组是这样

var qq = [
  
  {
    "group": 100,
    "info": {"event": 123},
    "main": true,
  },
  {
    "group": 100,
    "info": {"event": 323},
    "main": true,
    "sp": 1
  },
  {
    "group": 103,
    "info": {"event": 123},
    "main": true,
    "sp": 13,
  },
  {
    "group": 103,
    "info": {"event": 323},
    "main": true,
    "sp": 10
  },
  {
    "group": 103,
    "info": {"event": 123},
    "main": true,
    "sp": 1
  }
  ];

group是同数字表示是一组的,
我想把sp是1的,都放到同组的第一个,并且把main改成false,
这具体该怎么实现?有大神可以帮我试试吗

最终结果要是这样

var qq = [
   {
    "group": 100,
    "info": {"event": 323},
    "main": false,
    "sp": 1
  },
  {
    "group": 100,
    "info": {"event": 123},
    "main": true,
  },
  {
    "group": 103,
    "info": {"event": 123},
    "main": false,
    "sp": 1
  },
  {
    "group": 103,
    "info": {"event": 123},
    "main": true,
    "sp": 13,
  },
  {
    "group": 103,
    "info": {"event": 323},
    "main": true,
    "sp": 10
  }
  ];
阅读 8.3k
3 个回答
var group, index = -1;
for (var i = 0; i < qq.length; i++) {
    var obj = qq[i];
    if (group !== obj.group) index = i;
    if (obj.sp === 1 && obj.group === group) {
        obj.main = false;
        qq.splice(i, 1);
        qq.splice(index, 0, obj);
    }
    group = obj.group;
}
console.log(qq);
qq
  .sort((a, b) => a.group !== b.group
        ? a.group - b.group
        : a.sp === 1 ? -1 : 1
  )
  .forEach(x => x.main = x.sp === 1 ? false : x.main)

第一步,遍历数组qq,将要加到第一个位置的元素,取出来,可以使用数组的splice方法。
第二部,将取出来的所有元素,unshift到数组qq中

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题