如何在javascript中混洗一组对象?

时间:2018-03-29 11:48:39

标签: javascript arrays shuffle

下面的代码适用于普通数组但不适用于带有对象的数组吗?有人知道怎么做吗?



const array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

function shuffle(array) {
  for (let i = array.length - 1; i > 0; i--) {
    let j = Math.floor(Math.random() * (i + 1));
    let temp = array[i];
    array[i] = array[j];
    array[j] = temp;
  }
  return array;
}

const result = shuffle(array);

console.log(JSON.stringify(result));




3 个答案:

答案 0 :(得分:15)

尝试按此代码段排序:

console.log( [
    { some: 1 },
    { some: 2 },
    { some: 3 },
    { some: 4 },
    { some: 5 },
    { some: 6 },
    { some: 7 },
  ]
  .sort( () => Math.random() - 0.5) );

答案 1 :(得分:1)

这里还有一个基于lodash _.shuffle 的示例。

const array = [
    { some: 1 },
    { some: 2 },
    { some: 3 },
    { some: 4 },
    { some: 5 },
    { some: 6 },
    { some: 7 },
  ];
console.log(_.shuffle(array));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

答案 2 :(得分:0)

如果需要改组元素节点的集合(在DOM中),请先将其转换为数组:

var wrapper = document.getElementById('someid');
var array = Array.prototype.slice.call(wrapper.children);

直接改组HTMLCollection对象(由children返回)即使您可以使用for循环迭代集合,也无法直接进行。这让我迷迷了一段时间。