我有一个包含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);
您的原始数组将包含剩余的值。