[英]'Dealing' array elements in Javascript
我有四個數組(array1..4)每個包含四個字符串,例如
var array1 = ['array1item1', 'array1item2', 'array1item3', 'array1item4']
我也有四個空數組(finalarray1..4),在其中我要從四個原始數組中分別彈出()一個隨機選擇的項目,因此我將有四個像這樣的數組
finalarray1 = ['array1item3', 'array2item2', 'array3item2','array4item1']
如何在javascript中完成?
如果您希望最終數組是唯一的( 初始數組中的每個元素在所有最終數組中僅使用一次 ),請使用
function iRandomUpTo(upto){
return Math.floor( Math.random()*(upto) );
}
var initialArrays = [
['array1item1','array1item2','array1item3','array1item4'],
['array2item1','array2item2','array2item3','array2item4'],
['array3item1','array3item2','array3item3','array3item4'],
['array4item1','array4item2','array4item3','array4item4']
];
var finalArrays = [];
for(arrayIndex in initialArrays){
var newArray = finalArrays[arrayIndex] = [];
for(idx in initialArrays){
var singleArray = initialArrays[ idx ];
newArray.push( singleArray.splice( iRandomUpTo( singleArray.length ), 1 )[0] );
}
}
我沒有使用多個變量,而是使用了兩個包含初始和最終數組的數組。
上面的方法將不管您擁有的數組數量和數組中的元素數量( 假定它們都相等 )而起作用。
一種方式(為方便起見將4個輸出數組存儲在另一個數組中,破壞了傳遞的輸入)
var array1 = ['array1item1', 'array1item2', 'array1item3', 'array1item4']
var array2 = ['array2item1', 'array2item2', 'array2item3', 'array2item4']
var array3 = ['array3item1', 'array3item2', 'array3item3', 'array3item4']
var array4 = ['array4item1', 'array4item2', 'array4item3', 'array4item4']
finalarrays = shuffle(array1, array2, array3, array4);
function shuffle() {
var index, results = [];
for (var output = 0; output < arguments.length; output++) {
results[output] = [];
for (var input = 0; input < arguments.length; input++) {
results[output].push(arguments[input].splice(Math.floor(Math.random() * arguments[input].length), 1));
}
}
return results;
}
print( finalarrays[0].join() )
print( finalarrays[1].join() )
print( finalarrays[2].join() )
print( finalarrays[3].join() )
>> array1item2,array2item1,array3item2,array4item4
>> array1item4,array2item4,array3item4,array4item2
>> array1item1,array2item3,array3item3,array4item1
>> array1item3,array2item2,array3item1,array4item3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.