从多个数组中提取随机项

时间:2017-06-04 05:54:05

标签: javascript arrays random indexing

我有12个名为f1f12的数组,每个数组有五个项目。我想从每个数组中随机拉出一个项目并将它们推送到新数组sm1

var sm1 = [];

for (var i=1; i<=12; i++) {
    randomPrompt = Math.floor((Math.random() * 5));
    sm1.push("f"+i[randomPrompt]);
}

但是,这会返回"f"+i的随机索引,而不是索引f1f2f3f4等。

5 个答案:

答案 0 :(得分:3)

为什么不使用2-d数组而不是12个单数组。那么这将非常容易。

答案 1 :(得分:1)

行下面的更改

sm1.push("f"+i[randomPrompt]);

sm1.push(eval("f"+i+"["+randomPrompt+"]"));

答案 2 :(得分:0)

您可以使用窗口对象。

var sm1 = [];

for (var i=1; i<=12; i++) {
    randomPrompt = Math.floor((Math.random() * 5));
    sm1.push(window["f"+i][randomPrompt]);
}

答案 3 :(得分:0)

有几种方法可以完成你的要求。

示例:

var myArray = {
   "f1": [1,2,3,4,5],
   "f2": [6,7,8,9,10],
   "f3": [11,12,13,14,15],
   "f4": [16,17,18,19,20]
}

var sm1 = [];
for (var i=1; i<=4; i++) {
    randomPrompt = Math.floor((Math.random() * 5));
    sm1.push(myArray["f"+i][randomPrompt]);
}
console.log(sm1);

或者,如果您在浏览器中使用代码:

f1 = [1,2,3,4,5];
f2 = [6,7,8,9,10];
f3 = [11,12,13,14,15];
f4 = [16,17,18,19,20];

var sm1 = [];

for (var i=1; i<=4; i++) {
    randomPrompt = Math.floor((Math.random() * 5));
    sm1.push(window["f"+i][randomPrompt]);
}
console.log(sm1);

或使用eval()

f1 = [1,2,3,4,5];
f2 = [6,7,8,9,10];
f3 = [11,12,13,14,15];
f4 = [16,17,18,19,20];

var sm1 = [],item;

for (var i=1; i<=4; i++) {
    randomPrompt = Math.floor((Math.random() * 5));
    item = eval(["f"+i][0]);
    sm1.push(item[randomPrompt]);
}
console.log(sm1);

答案 4 :(得分:0)

var sm1 = [f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12].map(function (arr) {
    return arr[Math.floor((Math.random() * arr.length))];   
});

我使用二维数组投票而不是命名为12个单数组。