关于javascript:随机化并将对象拆分为2个数组

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

您的函数没有做任何事情来创建具有随机值的数组。