javascript - 二维数组中突然出现 "undefined"

标签 javascript arrays

我有这个功能:

function composeLootTables(lootType, result) {
    for (var d in lootType.items) {
        if (result[lootType.title] === undefined) {
            result[lootType.title] = [[0],[0]];
        }
        result[lootType.title][d][0] = lootType.items[d][0];
        result[lootType.title][d][1] = lootType.items[d][1];
        composeLootTables(lootType.items[d][0], result);
    }
    return result;
}

首先它解析这个:

residential : {
    title: "residential",
    items:[
        [generic, 0.7],
        [military, 0.7],
        [hospital, 0.7],
        [Colt1911, 0.5]
   ]
},

然后其他 lootType 就变成其中之一:

var Colt1911 = {
    title: "Colt 1911"
};
var generic = {
     title: "Generic",
     items: [[tin_can, 0.2],[jelly_bean, 0.3]]
};
var military = {
    title: "Military",
    items: [[bfg, 0.2],[akm, 0.3]]
};
var hospital = {
    title: "Hospital",
    items: [[condoms, 0.2],[zelyonka, 0.3]]
};

所以,问题出在这个字符串上:

 result[lootType.title][d][0] = lootType.items[d][0];
 result[lootType.title][d][1] = lootType.items[d][1];

Uncaught TypeError: Cannot set property '0' of undefined 

根据console.log,仅当“d”变为2或3时(其他时候“d”=== 0或1),result[lootType][d] === undefined

我假设如果我将值分配给数组的未定义字段,它将填充这个值。

我已经找到解决方案 -

result[lootType.title][d] = lootType.items[d];

工作正常,它返回正确的二维数组,但我想知道这些数组的处理方式是什么。

最佳答案

我不得不说问题在于您作为参数传递的 results 对象。如果没有在这些索引上创建足够的数组,那么这些位置将是未定义的,并且当您尝试分配给它们时会抛出错误。您的修改版本会起作用,因为它复制了对已初始化数组的引用。

关于javascript - 二维数组中突然出现 "undefined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12437410/

相关文章:

c# - SqlParameter 数组到对象

javascript - 如何在 JavaScript 上运行函数?

javascript - 对象过滤某些值

javascript - 将多维对象数组转换为 JSON

javascript - 扩展 d3 树布局以在最终节点提供 HTML 框

php - stdClass 对象和数组如何使用 php

javascript - 如何在引用 javascript 中添加引用

arrays - cocoa 多维NSArray

java - 为什么下面的代码只显示循环最后一圈的数组值?

c - 将两个给定数组交替组合成一个数组的函数