Javascript |奇数数组行为 - 解析组合数组与预定义数组

标签 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 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 数组以及您的 ab 数组,

combo.push(a);
combo.push(b);

不会像您声称的那样将ab元素推送到combo,而是,推送数组本身,使 combo 成为一个包含 2 个元素的数组,这两个元素都是原始 ab 数组本身。

如果您使用concat而不是push ,您的 combo 数组将按照您最初的预期构建。

即将您的 combineChars 函数更改为以下内容:

function combineChars(){
   combo = combo.concat(a);
   combo = combo.concat(b);
}

请注意,您需要重新分配combo,因为concat不会改变原始数组,而是返回一个新数组。

关于Javascript |奇数数组行为 - 解析组合数组与预定义数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34979452/

相关文章:

javascript - 为什么我的状态在 ReactJS 中被映射了太多次?

arrays - 上下文类型 String、float、f float 不能与数组文字一起使用

javascript - 多次执行函数按顺序替换部分参数

Java:将ResultSet拆分为多个数组(基于时间戳)

javascript - 确认字符串的结尾(可变结尾长度)

Javascript 在元素后追加子项

javascript - Node.js - ssh2-sftp-client 获取多个文件错误

arrays - 在 swift 4.2 的 TableView 中重复数组的 n 索引

java - (?!^)是什么意思

javascript - 为javascript中的重复元素创建新数组