在JavaScript中合并数组不起作用

在JavaScript中合并数组不起作用,javascript,Javascript,当我尝试var a=ar_url2.concat(ar_desc2)将我的数组合并为一个数组,它返回null。我相信这是微不足道的,但我现在花了几个小时在这个问题上,解释一下为什么会发生这样的事情会很好。在下面的代码中,我尝试了while(ar_url2.length)a.push(ar_url2.shift())并返回相同的null function agregar() { var i = 0, textarea; var ar_desc = [];

当我尝试
var a=ar_url2.concat(ar_desc2)
将我的数组合并为一个数组,它返回null。我相信这是微不足道的,但我现在花了几个小时在这个问题上,解释一下为什么会发生这样的事情会很好。在下面的代码中,我尝试了
while(ar_url2.length)a.push(ar_url2.shift())并返回相同的null

  function agregar() {

    var i = 0,
        textarea;
    var ar_desc = [];
    while (textarea = document.getElementsByTagName('textarea')[i++]) {
        if (textarea.id.match(/^desc_([0-9]+)$/)) {
            ar_desc.push(textarea.id);
        }
    }

    var desc_count_demo = document.getElementById('desc_count').value;
    var desc_count = desc_count_demo - 1;

    i = 0;
    var ar_desc2 = [];
    var campo = null;
    while (i <= desc_count) {

         campo = document.getElementById(ar_desc[i]).value;
        ar_desc2[ar_desc[i]] = campo;
        i++;
    }


    i = 0;
        var input;
    var ar_url = [];
    while (input = document.getElementsByTagName('input')[i++]) {
        if (input.id.match(/^url_([0-9]+)$/)) {
            ar_url.push(input.id);
        }
    }

    var url_count_demo2 = document.getElementById('url_count').value;
    var url_count2 = url_count_demo2 - 1;

   i = 0;
    var ar_url2 = [];
    while (i <= url_count2) {

         campo = document.getElementById(ar_url[i]).value;
        ar_url2[ar_url[i]] = campo;
        i++;
    }


  //  var a = Array.prototype.concat.call(ar_url2, ar_desc2);
     while (ar_url2.length) a.push(ar_url2.shift());

    function url(data) {
        var ret = [];
        for (var d in data)
        ret.push(encodeURIComponent(d) + "=" + encodeURIComponent(data[d]));
        return ret.join("&");

    }
  window.open('alta1.php?'+url(a));
}


但仍然无法将两者合并为一个…

我看到的一件事是,您的ar_url数组由以下内容填充:

while(input=document.getElementsByTagName('input')[i++]){
  if(input.id.match(/^url_([0-9]+)$/)){
    ar_url.push(input.id);
  }
}
由于您将整个
id
放入数组中,因此它将填充以下内容:
'url\u 0'
'url\u 1'
'url\u 2'
,等等

稍后你会:

  ar_url2[ar_url[i]] = campo;
当您索引到
ar\u url
时,您会得到
'url\u XXX'
字符串。这意味着您在
ar\u url2
上设置
'url\u XXX'
属性,而不是填充数组的元素

尝试将第二个循环更改为:

while(input=document.getElementsByTagName('input')[i++]){
  var result;
  if(result = input.id.match(/^url_([0-9]+)$/)){
    ar_url.push(+result[1]);
  }
}

使用RegExp的
([0-9]+)
部分捕获的值,而不是整个
“url\u XXX”
字符串。

提示:您可以添加小提琴吗?您的一个数组可能有格式不正确的数据。它也会将数组作为第一个参数<代码>[1,2,3]。concat([4,5,6])
等于
[1,2,3,4,5,6]
不过我同意你文章的其余部分。感谢你像成年人一样处理这件事,不像这里的一些人。
  ar_url2[ar_url[i]] = campo;
while(input=document.getElementsByTagName('input')[i++]){
  var result;
  if(result = input.id.match(/^url_([0-9]+)$/)){
    ar_url.push(+result[1]);
  }
}