Javascript关联数组返回类型错误

Javascript关联数组返回类型错误,javascript,arrays,Javascript,Arrays,我想创建一个简单的数组(比如php),我得到一个错误:“uncaughttypeerror:无法读取未定义(…)的属性'480'”问题出在哪里 var $form = []; for (var $i = 0; $i < 6; $i++) { $form[5][480]['value'][$i] = Math.floor(Math.random() * (6 - 4 + 1)) + 4; } var$form=[]; 对于(变量$i=0;$i

我想创建一个简单的数组(比如php),我得到一个错误:“uncaughttypeerror:无法读取未定义(…)的属性'480'”问题出在哪里

var $form = [];

for (var $i = 0; $i < 6; $i++) {
    $form[5][480]['value'][$i] = Math.floor(Math.random() * (6 - 4 + 1)) + 4;
}
var$form=[];
对于(变量$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);
var$form={
5: {
480: {
值:[]
}
}
};
对于(变量$i=0;$i<6;$i++){
$form[5][480]['value'][$i]=Math.floor(Math.random()*(6-4+1))+4;
}
console.log($form);

您试图从
$form[5]
下访问
480
,但
$form[5]
未定义。在循环之前,设置
$form=[]所以在位置
5
没有任何内容
$form
是一个空数组

顺便说一下,这是一个关联数组:

vararray1、array2、array3;
数组1=[1,2,3];
array2=[4,5,6];
数组3=[7,8,9];
var$form=[array1,array2,array3];
/*
$form[0]//数组1-[1,2,3]
$form[1]//数组2-[4,5,6]
$form[2]//数组3-[7,8,9]
$form[0][0]//数组1[0]-1
$form[0][1]//数组1[1]-2
...
$form[2][2]//数组3[2]-9
*/
看起来您可能想要使用的是一个对象

$form={//初始化$form
5:{
480:{value:[]}
}
};
对于(变量$i=0;$i<6;$i++){
$form[5][480]['value'][$i]=Math.floor(Math.random()*(6-4+1))+4;
}
但如果需要使用阵列,这也可以:

$form=[];//初始化$form
$form[5]=[];
$form[5][480]={value:[]};
var表单={
"5": {
"480": {
“价值”:[]
}
}
};
对于(变量i=0;i<6;i++){
表单[5][480][value'].push(Math.floor(Math.random()*(6-4+1))+4);
}

根据您展示的代码,这应该可以工作…

您可以在javascript中完成一些类似的操作-此函数可能不是最漂亮的方法,但它是通用的

第一个参数是“根”对象,后跟至少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 parts=arguments.slice(1);
var值=parts.pop();
部分减少(功能(结果、部分、索引){
if(索引<零件长度-1){
返回结果[部分]=结果[部分]|{};
}
结果[部分]=数值;
},根);
}
现在,您的代码需要如下更改:

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));
var$form={};//使用对象,而不是数组
对于(变量$i=0;$i<6;$i++){
assoc($form,5480,'value',$i,Math.floor(Math.random()*(6-4+1))+4);
}
log(JSON.stringify($form));

问问自己,
$form[5]定义在哪里?“关联数组”在JS中不存在。。。这里它们被称为对象…是的,我知道,但是没有定义就没有插入的选项?不,没有-但是你可以做一些事情close@JaromandaX,请找我的编辑,这是好办法吗?
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));