Javascript关联数组返回TypeError

时间:2016-11-22 11:22:27

标签: javascript arrays

我想制作简单的数组(比如在php中),我得到错误:“未捕获的TypeError:无法读取未定义的属性'480'(...)”问题出在哪里?< / p>

select 1 from dual where 0 = 0

解决方案吗

var $form = [];

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

3 个答案:

答案 0 :(得分: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:[]};

答案 1 :(得分:0)

options = {
  responsive: false,
  maintainAspectRatio: false
};

给出,你展示的代码,这应该工作......

答案 2 :(得分:0)

你可以在javascript中做一些事情 - 这个函数可能不是最漂亮的方法,但它是通用的

第一个参数是&#34; root&#34;对象,其后至少有1个节点&#34;,最后一个参数是值

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