将2个数组合并并交替为单个数组

时间:2012-07-25 20:29:02

标签: javascript

我有初学者脚本编写技巧,并且正在使用一种名为Opus Pro(Digital Workshop,UK)的程序中的JavaScript,ECMA-262。

我一直在网上搜索,没有成功,找到一种方法将2个数组中的数字元素合并和交替到第三个合并数组。我在这个网站上找到了一些脚本,但它们使用的是像这样的脚本语言中没有的“push”等功能,因此无法使用。

我当前为一组随机选择的数字(math.random)创建一个数组的脚本需要修改以创建2个数组(1-3和4-6),然后交替合并来自第一个数组的值与第二个数组中的值,直到新数组具有从这些(子)数组中取得的6个值:

当前未经修改的脚本:

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
     }         
}

这需要修改,以便最终的randomlist数组(称为newrandomlist [i])将是一个交替的混合,如2,6,1,4,3,5,但是从2个随机排序/创建的子组合阵列(1-3和4-6)。来自每个随机排序/构造的子阵列的交替值对于项目中其余脚本的运行至关重要。我尝试了很多想法,都没有成功。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:2)

ECMA-262具有具有.push()方法的Array对象。您可以在第15.4.4.7节的ECMA spec中自己查看。

要通过在每个数组中随机元素之间交替合并两个数组,您可以这样做:

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);
}