JS数组两两配对

例数组内有若干个元素,arr = [1,2,3,4,5],使之随机两两配对,若为奇数数量,则有一个元素配空,求一个效率最高的写法

阅读 3.4k
2 个回答

有个比较简单的实现
1、首先,数组随机排序
2、然后两两取值得到新数组

const arr = [1,2,3,4,2,25,22]
function randomArr(arr) {
  const list = [];
  arr
  .sort(() => Math.random() > 0.5 ? -1 : 1)
  .forEach((item, index) => {
    index % 2 == 0 ? list.push([item]) : list[list.length - 1].push(item)
  })
  return list;
}

要看你对随机性要求到底有多高,感觉是随机了就好的话,可以考虑 类似洗牌算法,就是随机N次,每次获取数组内2个元素进行位置交换,
然后依次每2个1组取出元素配对。
如果元素本身是比较大的,并不好交换,其实还可以用索引数组的方式(这额外占用一定空间,但处理可能比原数组更快),按原来的方法,交换索引数组的元素顺序,再用索引数组,间接取出配对原数组。

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