2016-11-22 26 views
-5

我想使簡單的數組(如在PHP中),我得到的錯誤:「未捕獲TypeError:無法讀取屬性'480'的undefined(...)」問題在哪裏?Javascript關聯數組返回類型錯誤

var $form = []; 

for (var $i = 0; $i < 6; $i++) { 
    $form[5][480]['value'][$i] = Math.floor(Math.random() * (6 - 4 + 1)) + 4; 
} 

解決方法?

var $form = { 
    5: { 
     480: { 
      value: [] 
     } 
    } 
}; 

for (var $i = 0; $i < 6; $i++) { 
    $form[5][480]['value'][$i] = Math.floor(Math.random() * (6 - 4 + 1)) + 4; 
} 

console.log($form); 
+2

問自己這一點 - 這裏是'$形式[5]'定義? –

+1

「關聯數組」在JS中不存在...在這裏他們被稱爲對象... – Argee

+0

是的,我知道,但沒有選擇插入沒有定義? –

回答

0

您可以在javascript中執行某些操作 - 這個功能可能不是最好的方法,但它的通用性如下:

第一個參數是「root」對象,緊隨其後的是至少1個「節點」,最後一個參數是值

function assoc(root) { 
    var parts = arguments.slice(1); 
    var value = parts.pop(); 
    parts.reduce(function(result, part, index) { 
     if (index < parts.length - 1) { 
      return result[part] = result[part] || {}; 
     } 
     result[part] = value; 
    }, root); 
} 

現在你的代碼需要改變這樣的:

var $form = {}; // use an object, not an array 
for (var $i = 0; $i < 6; $i++) { 
    assoc($form,5,480,'value',$i, Math.floor(Math.random() * (6 - 4 + 1)) + 4); 
} 
console.log(JSON.stringify($form)); 
0

你試圖訪問480$form[5],但$form[5]是不確定的。在循環之前,您正在設置$form = [];,因此5處沒有任何內容。 $form是一個空數組。

順便說一句,這是一個關聯數組:

var array1, array2, array3; 

array1 = [1,2,3]; 
array2 = [4,5,6]; 
array3 = [7,8,9]; 

var $form = [array1, array2, array3]; 

/* 
    $form[0] // array1 - [1,2,3] 
    $form[1] // array2 - [4,5,6] 
    $form[2] // array3 - [7,8,9] 

    $form[0][0] // array1[0] - 1 
    $form[0][1] // array1[1] - 2 

    ... 

    $form[2][2] // array3[2] - 9 
*/ 

看起來你可能想使用什麼是對象。

$form = { // initialize $form 
     5:{ 
     480: { value: [] } 
     } 
    }; 

    for (var $i = 0; $i < 6; $i++) { 
     $form[5][480]['value'][$i] = Math.floor(Math.random() * (6 - 4 + 1)) + 4; 
    } 

但是如果你需要使用一個數組,這也將工作:

$form = []; // initialize $form 
    $form[5] = []; 
    $form[5][480] = {value:[]}; 
0
var form = { 
    "5": { 
     "480": { 
      "value": [] 
     } 
    } 
}; 

for (var i = 0; i < 6; i++) { 
    form[5][480]['value'].push(Math.floor(Math.random() * (6 - 4 + 1)) + 4); 
} 

,你表現的代碼,這應該工作。 ..