js数组对象随机排序

var arr = [
  {name: '头不动', id: '1'},
  {name: '2', id: '2'},
  {name: '不动', id: '3'},
  {name: '4', id: '4'},
  {name: '5', id: '5'},
  {name: '尾巴不动', id: '6'
}]

请问下想让id为2、4、5 随机排序有什么好办法吗?剩下元素位置不变
我想的是先把要排序的内容单独存入一个数组,然后记一个原始index,然后随机排,然后再记录一个目标index,然后再去原始数组里根据这2个index去做交换,感觉好复杂·有木有啥偷懒点的方法呢

const randomSort = (arr) => {  
  let i = arr.length  
  while (i) {  
  let j = Math.floor(Math.random() * i--);  
  [arr[j], arr[i]] = [arr[i], arr[j]]  
 }  
 return arr  
}
已解决 悬赏分:70 - 解决时间 2021-11-26 17:41
反对 0举报 0 收藏 0

回答1

最佳
  • @
    randomSort = (arr, filter) => {
      let list = arr.filter(filter).sort(() => .5 - Math.random())
      return arr.map(item => filter(item) ? list.pop() : item)
    }
    randomSort(arr, item => ['2', '4', '5'].includes(item.id))

    image.png

    支持 0 反对 0 举报
    2021-11-26 11:52