2014-05-23 80 views
0

我需要在JavaScriptjQuery的多維數組未定義

var collection = new Array(); 
$(document).on('change', 'input[type="checkbox"]', function(e) { 
    if (this.checked) { 
     var type = $(this).data('type'); 
     var id = $(this).data('id'); 

     collection[type].push(id); 
    } 
}); 

Uncaught TypeError: Cannot read property 'push' of undefined

創建多維數組我需要這些值後來轉換成JSON格式。

任何想法如何解決這個問題?

+1

爲什麼不只是'var collection = {}'而是創建一個對象,看起來更適合這個。 – adeneo

回答

1

您可以創建一個的對象,在這種情況下更合適:

var collection = {}; 
$(document).on('change', 'input[type="checkbox"]', function(e) { 
    if (this.checked) { 
     var type = $(this).data('type'); 
     var id = $(this).data('id'); 

     if (!collection[type]) { 
      collection[type] = []; 
     } 
     collection[type].push(id); 
    } 
}); 
+0

謝謝,這個作品完美,一旦允許,將接受你的答案 – cicakman

+0

@cicakman不用擔心:) – chridam

1

你必須定義數組:

//var collection = new Array(); //for array index must be ineger 
var collection = {}; //for not numeric indexes 
$(document).on('change', 'input[type="checkbox"]', function(e) { 
    if (this.checked) { 
     var type = $(this).data('type'); 
     var id = $(this).data('id'); 
     if('array' !== typeof collection[type]) collection[type] = new Array(); 
     collection[type].push(id); 
    } 
}); 
+0

我需要類型爲字符串?有沒有解決這個問題的方法?根據你的回答,只記錄最新值,而前一個值不記錄。 – cicakman

+0

'var collection = {};'這個工作。 – Krzysiek

+0

謝謝@Krzysiek – cicakman

1

的原因,這是行不通的是,你正在嘗試將其推入多維數組中,但您嘗試推送的數組並不存在。

var collection = []; 
$(document).on('change', 'input[type="checkbox"]', function(e) { 
    if (this.checked) { 
     var type = $(this).data('type'); 
     var id = $(this).data('id'); 

     if (typeof collection[type] === 'undefined') { 
      collection[type] = []; 
     } 

     collection[type].push(id); 
    } 
}); 

這應該工作。只是你知道,使用[]而不是new Array()要好得多。由於調用new Array()可能會有非常奇怪的行爲,並且可能會讓初學者感到困惑,因爲大多數情況下堅持使用`[]。

此外我還添加了if (typeof collection[type] === 'undefined') {
這將做的是檢查集合數組內的索引是否未定義。如果是這樣,那意味着沒有陣列來推送id。因此,我們創建類型的數組內收集與它下面的一行:

collection[type].push(id);

。希望對你有意義的,我記得multimentional陣列是混淆過!