通过索引AS3

问题描述:

如何合并阵列寻找一条通过索引像这样合并数组:通过索引AS3

var a1:Array = ["a", "b", "c"]; 
var a2:Array = ["1", "2", "3"]; 

var a3:Array = result: ["a", 1, "b", 2, "c", 3] 

我试过concat,则推,拼接......不是越来越近。谢谢。

+2

你究竟试过了什么?这不是一个代码写入服务。请展示一些研究工作。 – null

+0

@null再次,即使我没有“downvoted”的问题(这是他发布的第一个)... – tatactic

function arrayMerge(arr1:Array, arr2:Array):Array { 
    var o:Array = new Array(); 
    for (var i:int=0; i<Math.max(arr1.length, arr2.length); i++) { 
     if (i<arr1.length) o.push(arr1[i]); 
     if (i<arr2.length) o.push(arr2[i]); 
    } 
    return o; 
} 
+0

“Upvoted”! 清晰而短小! – tatactic

@AndyH: payamsbr是对的,但你可以用向量或数组

也许TL工作;博士;但这是原则。 如果你想了解一些东西,尝试这些可能性。 如果你不这样做,只是复制和粘贴一些较短的代码;)

var v1:Vector.<String> = new <String>["a", "b", "c"]; 
var v2:Vector.<uint> = new <uint>[1, 2, 3]; // why do you use String here and not uint? 
// if you want to convert a uint to a String, use myUint.toString(); 
function convertVectorToArray(v1:Vector.<String>,v2:Vector.<uint>):Array{ 
    var mergedArray:Array = new Array(); 
    if (v1.length != v2.length){ 
     throw(new Error(" ***ERROR : the two Vectors or Arrays have not the same lenfgth!")); 
    }else{ 
     for(var i:uint = 0; i <v1.length ; i++){ 
      mergedArray.push(v1[i]); 
      mergedArray.push(v2[i]); 
     } 
    } 
    return(mergedArray); 
} 
function mergeVectors(v1:Vector.<String>,v2:Vector.<uint>):Vector.<Object>{ 
    var mergedVector:Vector.<Object> = new Vector.<Object>(); 
    if (v1.length != v2.length){ 
     throw(new Error(" ***ERROR : the two Vectors or Arrays have not the same length!")); 
    } 
    for(var i:uint = 0; i <v1.length ; i++){ 
     mergedVector.push(v1[i] as String); 
     mergedVector.push(v2[i] as uint); 
    } 
    return(mergedVector); 
} 
var mergedArray:Array = (convertVectorToArray(v1,v2)); 
var mergedVector:Vector.<Object> = (mergeVectors(v1,v2)); 
function listArray(arr:Array):String{ 
    var str: String=""; 
    if ((v1.length*2) != (v1.length + v2.length)){ 
     throw(new Error(" ***ERROR : the two Vectors or Arrays have not the same length!")); 
    }else{ 
     for (var i:uint = 0; i < arr.length ; i++){ 
      str+="typeof(arr[" + i + "]) = " + (typeof(arr[i]) as String).toUpperCase() + ", value = " + arr[i] + "\n"; 
     } 
    } 
    return str; 
} 
function listVector(vect:Vector.<Object>):String{ 
    var str: String = ""; 
    if ((v1.length*2) != (v1.length + v2.length)){ 
     throw(new Error(" ***ERROR : the two Vectors or Arrays have not the same length!")); 
    }else{ 
     for (var i:uint = 0; i < vect.length ; i++){ 
      str+="typeof(vect[" + i + "]) = " + (typeof(vect[i]) as String).toUpperCase() + ", value = " + vect[i] + "\n"; 
     } 
    } 
    return str; 
} 
trace(listArray(mergedArray)); 
trace(listVector(mergedVector)); 

如果你需要它,你可能会增加sort()方法(你没有告诉它) ,始终抛出如果2阵列或矢量的长度不同,则出错

抛出一个错误是了解是否出现问题的最好方法... 如果您需要调试您的代码,这将避免您很多时间!

正如你所看到的输出是一样的,但是如果Vector类被正确使用,这比Array更高效。

输出:

因为有一个Vector类,我不明白有很多人谁选择阵列,而不是... 路线矢量。是无稽之谈,但我仍然发布它,所以你可以指出你的矢量类。

输出是一样的:

typeof(arr[0]) = STRING, value = a 
typeof(arr[1]) = NUMBER, value = 1 
typeof(arr[2]) = STRING, value = b 
typeof(arr[3]) = NUMBER, value = 2 
typeof(arr[4]) = STRING, value = c 
typeof(arr[5]) = NUMBER, value = 3 

typeof(vect[0]) = STRING, value = a 
typeof(vect[1]) = NUMBER, value = 1 
typeof(vect[2]) = STRING, value = b 
typeof(vect[3]) = NUMBER, value = 2 
typeof(vect[4]) = STRING, value = c 
typeof(vect[5]) = NUMBER, value = 3 

我忘了这最简单的方法,如果你真的想要一个数组... 快速完成!

var ar1:Array = [1,2,3]; 
var ar2:Array = ["a","b","c"]; 
function merge(...arrays):Array { 
    var result:Array = []; 
    for(var i:int=0;i<arrays.length;i++){ 
     result = result.concat(arrays[i]); 
    } 
    return result; 
} 
trace(merge(ar1, ar2)); 
// outputs : 1,2,3,a,b,c 

另一种可能性:

function populateObject(v1:Vector.<String>, v2:Vector.<uint>):Object{ 
    var obj = new Object(); 
    if ((v1.length*2) != (v1.length + v2.length)){ 
     throw(new Error(" ***ERROR : the two Vectors or Arrays have not the same length!")); 
    }else{ 
     for (var i:uint = 0; i < v1.length; i++){ 
      obj[v2[i]] = v1[i]; 
     } 
    } 
    return obj; 
} 
var o:Object = populateObject(v1,v2); 

function listObject(someObj:Object):void{ 
    var myObj:Object = someObj; 
    for (var i:String in someObj){ 
     trace(someObj[i] + ": " + i); 
    } 
} 

listObject(o); 

output = 
a: 1 
b: 2 
c: 3 

我认为你有很多的可能性在这里使用,即使是我再回答;)

如果你尝试这些可能性,并了解他们,这肯定会帮助你思考找到处理你的问题的最佳方式。

但您也可以复制并粘贴一些较短的代码。 我只是想告诉你,有不止一个答案。 如果你明白这一点,你将能够进一步进行编码。

玩得开心;)

真诚。 Nicolas

此致敬礼。 Nicolas。

+0

既然有Vector类,我不明白很多人选择了Arrays而不是... 当然Vector。 是无稽之谈,但我贴了它,所以你可以指出你的矢量类。 真诚。 萨科 – tatactic

+0

看到这里引用为什么int或UINT被标记为一个号码来计算你出去: http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3_Flex/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f87.html – tatactic

+0

这是日志,因为你想要保留1,2,3作为数字,而不是字符串。 – tatactic

感谢Payam的回答和非判断。下面是我如何应用你的工作:

var arr1:Array = ["question1", "question2", "question3"]; 
var arr2:Array = ["answer1", "answer2", "answer3"]; 
var o:Array = new Array(); 

for (var i:int=0; i<Math.max(arr1.length, arr2.length); i++) { 
    if (i<arr1.length) o.push(arr1[i]); 
    if (i<arr2.length) o.push(arr2[i]); 
    } 

    trace(o); //(question1,answer1,question2,answer2,question3,question3)