2013-09-28 55 views
0

當我嘗試var a = ar_url2.concat(ar_desc2);將我的數組加入到數組中時,它返回null。我敢肯定這是微不足道的,但我花了幾個小時來解決這個問題,並解釋爲什麼發生這種情況會很好。在我的代碼波紋管我試圖while(ar_url2.length)a.push(ar_url2.shift());,並返回相同的空...在JavaScript中合併數組無法正常工作

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)); 
} 

編輯:如果我傳遞給函數的URL(ar_url2)或URL(ar_desc2)在URL中返回的值是

http://localhost/proj1/alta1.php?url_0=inpit&url_1=input 

http://localhost/proj1/alta1.php?desc_0=input&desc_1=input 

但還是不能都合併到一個...

+3

提示:http://jsbeautifier.org/ – elclanrs

+0

你可以添加一個小提琴嗎?其中一個陣列可能有畸形數據。 –

回答

2

一件事,我看到的是你的ar_url陣列由填充:

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

既然你把數組中的整個id,它將被裝的東西,如:'url_0''url_1''url_2',等...

後來你做:

ar_url2[ar_url[i]] = campo; 

當你索引ar_url,你走出'url_XXX'字符串。這意味着您要在ar_url2上設置'url_XXX'屬性,而不是填充數組的元素。

試着改變你的第二個循環中:

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

要使用的正則表達式,而不是整個'url_XXX'字符串([0-9]+)部分捕捉到的值。

+0

它也可以將數組作爲第一個參數。 '[1,2,3] .concat([4,5,6])'等於'[1,2,3,4,5,6]' –

+0

我同意你的其他帖子。 –

+1

好點,我刪除了帖子的那一部分。 – nkron