我在数组方面遇到了一些奇怪的行为。我不明白发生了什么事。如果我创建两个数组...
var a = [0,0,1,0];
var b = [0,2, 1,2];
并将它们组合起来...
combineChars();
function combineChars(){
combo.push(a);
combo.push(b);
}
我最终得到了一个数组...
combo = [0,0,1,0,0,2,1,2];
但是,如果我尝试将数组拆分为两个单独的数组,它不会按预期拆分。
function splitArray(a){
console.log("splitArray("+a+")"); //splitArray(0,0,1,0,0,2,1,2)
for (i=0;i<a.length;i++){
if ((i+2)%2==0) {
rSplit.push(a[i]);
} else {
cSplit.push(a[i]);
}
}
console.log("rSplit = " + rSplit); //rSplit = 0,0,1,0
console.log("cSplit = " + cSplit); //cSplit = 0,2,1,2
}
预期...
console.log("rSplit = " + rSplit); //rSplit = 0,0,1,0,0,1,0,1
console.log("cSplit = " + cSplit); //cSplit = 0,2,1,2,0,0,2,2
fiddle :https://jsfiddle.net/taylorRichie/yrzrqm38/4/
正如您从 fiddle 中看到的,如果我创建数组“co”而不是组合两个数组,它的行为将按预期进行。
???
任何帮助将不胜感激。
里奇
最佳答案
给定一个空的 combo
数组以及您的 a
和 b
数组,
combo.push(a);
combo.push(b);
不会像您声称的那样将a
和b
的元素推送到combo
,而是,推送数组本身,使 combo
成为一个包含 2 个元素的数组,这两个元素都是原始 a
和 b
数组本身。
如果您使用concat
而不是push
,您的 combo
数组将按照您最初的预期构建。
即将您的 combineChars
函数更改为以下内容:
function combineChars(){
combo = combo.concat(a);
combo = combo.concat(b);
}
请注意,您需要重新分配combo
,因为concat
不会改变原始数组,而是返回一个新数组。
关于Javascript |奇数数组行为 - 解析组合数组与预定义数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34979452/