我有一个包含8个项目的对象-我想将这些项目分成2个数组(随机化)。

我要实现的目标:

对象:{1,2,3,4,5,6}:已编码

从对象开始,它应该自动创建2个单独的数组,并获取对象项并将它们随机化到数组中。确保它不会重复。

阵列1:[3、5、6]

阵列2:[2、1、4]

到目前为止的代码:

var element = {
  1: {
    "name": "One element",
    "other": 10
  },
  2: {
    "name": "Two element",
    "other": 20
  },
  3: {
    "name": "Three element",
    "other": 30
  },
  4: {
    "name": "Four element",
    "other": 40
  },
  5: {
    "name": "Five element",
    "other": 50
  },
  6: {
    "name": "Six element",
    "other": 60
  },
  7: {
    "name": "Seven element",
    "other": 70
  },
  8: {
    "name": "Eight element",
    "other": 80
  }
};

function pickRandomProperty(obj) {
  var result;
  var count = 0;
  for (var prop in obj)
    if (Math.random() < 1 / ++count)
      result = prop;
  return result;
}



console.log(pickRandomProperty(element));

最佳答案

确保您的对象变量是一个数组。
var element = [... youritems];
不知道您所拥有的是否可以正常工作:var element = {...您的物品...};
您可以使用此代码对数组进行随机排序(事实上的无偏随机算法是Fisher-Yates(又名Knuth)随机排序。):How to randomize (shuffle) a JavaScript array?

function shuffle(array) {
var currentIndex = array.length, temporaryValue, randomIndex;
while (0 !== currentIndex) {

// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;

// And swap it with the current element.
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}


然后像这样(Splice an array in half, no matter the size?)进行拼接:

    var half_length = Math.ceil(arrayName.length / 2);
    var leftSide = arrayName.splice(0,half_length);


您的原始数组将包含剩余的值。

09-10 07:15
查看更多