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  
}
阅读 3k
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

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