Javascript |奇数数组行为-解析组合数组与预定义数组
我在数组中遇到一些奇怪的行为。我不明白发生了什么事。如果我创建两个数组Javascript |奇数数组行为-解析组合数组与预定义数组,javascript,arrays,split,push,Javascript,Arrays,Split,Push,我在数组中遇到一些奇怪的行为。我不明白发生了什么事。如果我创建两个数组 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 spli
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
}
小提琴:
正如您从小提琴中看到的,如果我创建数组“co”而不是组合两个数组,它的行为与预期的一样
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
}
任何帮助都将不胜感激
里奇给定一个空的
组合
数组,以及你的a
和b
数组
combo.push(a);
combo.push(b);
不会像您所说的那样将a
和b
的元素推送到combo
,而是推送数组本身,使combo
成为一个包含两个元素的数组,两个元素都是原始a
和b
数组本身
如果使用而不是,您的组合
数组将按照您最初的预期构造
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
}
i、 e.将您的combineChars
功能更改为以下内容:
function combineChars(){
combo = combo.concat(a);
combo = combo.concat(b);
}
请注意,您需要重新分配
combo
,因为concat
不会改变原始数组,而是返回一个新数组。首先查看内置的数组。prototype
方法
var rSplit = [].concat(a).concat(b);
var lSplit = [].concat(b).concat(a);
你是而不是以这8个元素的数组组合结束。您将得到一个由2个元素组成的数组组合,每个元素分别是它们各自的原始4个元素数组。数组可以将其他数组作为元素保存。Push将某些内容添加为元素…它不会将数组连接在一起 您需要使用
.concat
来实际组合两个数组
combo=a.concat(b)代码>您的第一位代码看起来可疑<代码>变量组合[];组合推(a);组合推送(b)
将生成一个嵌套数组(combo.length将为2,第一个元素是整个数组a
,第二个元素是整个数组b
),而不是您声称的平面数组(点击F12,自己检查)。您确定最终得到的是[0,0,1,0,0,2,1,2]代码>以这种方式组合之后?您应该以包含两个元素的combo
结束,这两个元素都是数组(a和b)。为什么您希望得到您为rSplit
和cSplit
所述的结果?啊。。。我需要循环浏览a和b的内容,并分别推送它们?使用像concat()这样的方法可以为您完成这一任务,或者只需combo=a.concat(b)代码>由于concat不修改原始数组。@JimboJonny在本例中是正确的,我只想尽可能地遵循OP的逻辑,以突出区别。(这更接近于“推送”值的一般语义——如果combo不是空的,它也会起作用)