0

我有初学者技能,希望有人可以帮助我使用 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 个子阵列中尝试 zipper 方法,% 来挑选奇数/偶数等。到目前为止,没有任何效果。但至少我获得了更多的知识,使我能够以一种可能有助于创建更具体的解决方案的方式提出问题。我会对此进行硬编码,但我认为可能的变化/案例的数量可能会很大?

我希望有人可以在基本 JS 中建议一个脚本/函数,它可以(1)设置每个随机子数组,然后(2)创建最终的 6 项数组。

亲切的问候,

4

1 回答 1

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);
于 2012-07-26T16:40:06.463 回答