复杂的建筑/排序阵列

时间:2012-07-26 16:31:32

标签: javascript

我有初学者技能,希望有人可以帮助我使用JavaScript ECMA-262中的复杂脚本(尽可能基本的JS脚本,因为我使用的程序只有较旧的ECMA-262实现。所以在这个程序的语言参考中找不到一些像“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个项目数组。

亲切的问候,

1 个答案:

答案 0 :(得分:0)

如果你被限制在现代JS API的子集中,我可能会采用首先合并两个数组(迭代)然后应用随机排序的方法。类似的东西:

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