0

私は初心者のスキルを持っており、誰かがJavaScript ECMA-262の複雑なスクリプトを手伝ってくれることを望んでいます(私が使用しているプログラムにはECMA-262の古い実装しかないため、可能な限り基本的なJSスクリプトです。このプログラムの言語リファレンスには、「splice」や「concat」などの関数はありませんが、基本的なJSは問題なく動作します)。

2つの別々のサブ配列(subarrayA=1,2,3およびsubarrayB=4,5,6)から合計6つの数値を作成し、各サブ配列から最後の6つに番号(各サブ配列からランダムに選択)を交互に配置しようとしています。アイテム配列。また、重複はありません。

したがって、たとえば、3,6,1,4,2,5。

私はオンライン検索、このボード、2つのサブアレイからのジッパーメソッド、奇数/偶数を選択するための%などを試しました。これまでのところ、何も機能していません。しかし、少なくとも私は、より具体的な解決策を作成するのに役立つかもしれない方法で質問をすることを可能にするいくつかの知識を得ました。これをハードコーディングしますが、可能なバリエーション/ケースの数はかなり多いと思いますか?

誰かが基本的なJSで、(1)各ランダムなサブ配列を設定し、(2)最後の6項目の配列を作成できるスクリプト/関数を提案してくれることを願っています。

敬具、

4

1 に答える 1

0

最新のJSAPIのサブセットに制限されている場合は、最初に2つの配列を(繰り返し)マージしてから、ランダムな並べ替えを適用するというアプローチをとるでしょう。何かのようなもの:

var arr1 = [1,2,3], arr2 = [4,5,6];
for (var i=0, len = arr2.length; i<len; i++) arr1[arr1.length] = arr2[i];
arr1.sort(function() { return 0.5 - Math.random(); });

arr1はランダムな順序で6つの数字の配列になり、繰り返しはありません。

[編集]-以下の議論に基づいて、これを試してください。

//prep - two arrays, randomised order
var arr1 = [1,2,3].sort(r_sort),
    arr2 = [4,5,6].sort(r_sort),
    final_arr = [],
    smallest_array = arr1.length < arr2.length ? arr1 : arr2;
function r_sort() { return 0.5 - Math.random(); }

//build final array - intersecting the two arrays
for (var i=0, len = smallest_array.length; i<len; i++) {
    final_arr[final_arr.length] = smallest_array[i];
    if (smallest_array == arr1 && arr2[i])
        final_arr[final_arr.length] = arr2[i];
    else if (smallest_array == arr2 && arr1[i])
        final_arr[final_arr.length] = arr1[i];

}

//result
alert(final_arr);
于 2012-07-26T16:40:06.463 に答える