Randomize and split object into 2 arrays
我有一个有8个项目的对象-我想把这些项目分成2个数组(随机)。
我想要达到的目标:
对象:1,2,3,4,5,6:Harcoded
从对象中,它应该自动创建两个独立的数组,并将对象项随机放入数组中。确保它不会重复。
数组1:[3,5,6]
数组2:[2,1,4]
迄今为止的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | 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元素=[…youritems];不确定您所拥有的是否有效:var element=…您的项…;您可以使用这段代码来随机播放您的数组(事实上,无偏随机播放算法是Fisher Yates(又称Knuth)随机播放):如何随机播放(随机播放)一个javascript数组?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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; } |
然后像这样拼接(将一个数组拼接成两半,不管大小如何?):
1 2 | var half_length = Math.ceil(arrayName.length / 2); var leftSide = arrayName.splice(0,half_length); |
号
原始数组将包含其余值。
你的if逻辑不合理。
1 | if (Math.random() < 1 / ++count) |
math.random()将产生介于0(含)和1(不含)之间的任何值。http://www.w3schools.com/jsref/jsref_random.asp
您的函数没有做任何事情来创建具有随机值的数组。