复杂建筑/排序阵列

Complex Building/Sorting Arrays

本文关键字:阵列 排序 建筑 复杂      更新时间:2024-02-26

我有初学者的技能,希望有人能帮助我使用JavaScript ECMA-262中的复杂脚本(尽可能基本的JS脚本,因为我使用的程序只有ECMA-262的旧版本。因此,在该程序的语言引用中找不到一些数组函数,如"splice"甚至"concat"。但是基本的JS还可以)。

我试图从两个单独的子阵列(子阵列a=1,2,3和子阵列B=4,5,6)中创建一个总共6个数字的阵列,交替地将每个子阵列中的一个数字(从每个子阵列随机选择)放入最后的6项阵列中。此外,没有重复。

例如,3,6,1,4,2,5。

我试过在线搜索,这个板,从2个子数组中尝试zipper方法,%来挑选奇数/偶数,等等。到目前为止,一切都不起作用。但至少我已经获得了更多的知识,这让我能够以一种可能有助于创建更具体解决方案的方式提出这个问题。我会对此进行硬编码,但我认为可能的变体/案例数量可能相当大?

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

谨致问候,

如果你被限制在现代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);