javascript - 在 Javascript 中随机播放嵌套数组

标签 javascript arrays sorting

我正在尝试对一个数组中的多个数组进行排序(也必须对其进行洗牌)。一个简化的例子是:

let toShuffle = [
[1, 2, 3, 4, 5],
[9, 8, 7, 6, 5],
[10, 67, 19 ,27]
...
];

const shuffled = shuffle(toShuffle);

// outout would look something like:
// [
//   [8, 6, 5, 7, 9],
//   [4, 3, 1, 5, 2],
//   [19, 26, 10, 67],
//   ...
// ]
这需要灵活,因此具有任意数量值的任意数量的数组都应该是有效的。
这是我尝试过的:

function shuffle(a) {
  for (let e in a) {
    if (Array.isArray(a[e])) {
      a[e] = shuffle(a[e]);
    } else {
      a.splice(e, 1);
      a.splice(Math.floor(Math.random() * a.length), 0, a[e]);
    }
  }

  return a;
}

console.log("Shuffled: " + shuffle([
  [1, 2, 3, 4, 5],
  [5, 4, 3, 2, 1]
]))

但它没有按预期工作。他们是更简单的方法吗?或者我的代码是正确的,只是有问题。

最佳答案

您可以使用Array.from()创建一个新的浅拷贝array然后洗牌Array.prototype.sort()结合 Math.random()
代码:

const toShuffle = [
  [1, 2, 3, 4, 5],
  [9, 8, 7, 6, 5],
  [10, 67, 19 ,27]
]

const shuffle = a => Array.from(a).sort(() => .5 - Math.random())
const result = toShuffle.map(shuffle)

console.log('Shuffled:', JSON.stringify(result))
console.log('To shuffle:', JSON.stringify(toShuffle))

关于javascript - 在 Javascript 中随机播放嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72223247/

相关文章:

javascript - 如何在javascript中一段时间​​后清除sessionstage

javascript - 将 jquery javascript 文件或任何其他文件添加到 application.html.erb 时出现 Rails 3 问题?

arrays - 算法 : Median of two sorted array of different sizes

javascript - Event.observe 原型(prototype) Javascript 效率低下,替代品?

javascript - JS Async/Await vs Promise vs Callbacks

javascript - 如何过滤该数组中大于或等于 90 的标记?

javascript - 如何比较一维向量与二维数组的元素

javascript - 对 jQuery 数据表中的数字进行排序

java - 线程中的异常 "main"java.lang.ArrayIndexOutOfBoundsException : 1 at beerregister. BeerRegister.list(BeerRegister.java:66)

java - 根据键大小对 HashMap 键进行排序