3

私は初心者のスクリプト スキルを持っており、Opus Pro (デジタル ワークショップ、英国) というプログラムにある JavaScript の形式である ECMA-262 を使用しています。

2 つの配列の数値要素を 3 番目の結合配列に結合して交互にする方法を見つけるために、成功せずにオンラインで検索してきました。このサイトでいくつかのスクリプトを見つけましたが、このスクリプト言語にはない「push」などの機能を使用しているため、使用できません。

ランダムに選択された数値 (math.random),1-6 のセットに対して 1 つの配列を作成する現在のスクリプトは、2 つの配列 (1-3 および 4-6) を作成するように変更する必要があります。新しい配列がこれらの (サブ) 配列から取得した 6 つの値を持つまで、2 番目の配列の値を持つ最初の配列:

現在の変更されていないスクリプト:

function separate()
{
  for(i=1;i<=listamount;i++)
     {
     //create 6 random numbers from 1-6
     temp = Math.round(Math.random()*(6))
     if (temp == 0){temp = 1}
     if (temp == 7){temp = 6}

        randomset[i] = temp
     }         
}

最終的なランダムリスト配列 (newrandomlist[i] と呼びます) が 2,6,1,4,3,5 のような交互の組み合わせになるように、これを修正する必要がありますが、ランダムに順序付け/作成された 2 つのサブ配列 (1 -3 および 4-6)。ランダムに順序付け/構築された各サブ配列からの交互の値は、プロジェクト内の残りのスクリプトの機能にとって重要です。私はあらゆるアイデアを試しましたが、すべて失敗しました。

どんな助けでも感謝します。

4

1 に答える 1

3

ECMA-262 にはメソッドを持つ Array オブジェクトがあります.push()。セクション 15.4.4.7のECMA 仕様で確認できます。

各配列のランダムな要素を交互に使用して 2 つの配列をマージするには、次のようにします。

function mergeTwoRandom(arr1, arr2) {

    function extractRandom(arr) {
        var index = Math.floor(Math.random() * arr.length);
        var result = arr[index];
        // remove item from the array
        arr.splice(index, 1);
        return(result);
    }

    var result = [];
    while (arr1.length || arr2.length) {
        if (arr1.length) {
            result.push(extractRandom(arr1));
        }
        if (arr2.length){
            result.push(extractRandom(arr2));
        }
    }
    return(result);
}

なしでやりたい場合は.push()、次のようにできます。

function mergeTwoRandom(arr1, arr2) {

    function extractRandom(arr) {
        var index = Math.floor(Math.random() * arr.length);
        var result = arr[index];
        // remove item from the array
        arr.splice(index, 1);
        return(result);
    }

    var result = [];
    while (arr1.length || arr2.length) {
        if (arr1.length) {
            result[result.length] = extractRandom(arr1);
        }
        if (arr2.length){
            result[result.length] = extractRandom(arr2);
        }
    }
    return(result);
}

も持っていない場合は.splice()、次のようにすることができます。

function mergeTwoRandom(arr1, arr2) {

    function removeItem(arr, index) {
        for (var i = index; i < arr.length - 1; i++) {
            arr[i] = arr[i + 1];
        }
        arr.length = arr.length - 1;
    }

    function extractRandom(arr) {
        var index = Math.floor(Math.random() * arr.length);
        var result = arr[index];
        // remove item from the array
        removeItem(arr, index);
        return(result);
    }

    var result = [];
    while (arr1.length || arr2.length) {
        if (arr1.length) {
            result[result.length] = extractRandom(arr1);
        }
        if (arr2.length){
            result[result.length] = extractRandom(arr2);
        }
    }
    return(result);
}
于 2012-07-25T20:40:29.473 に答える