无法访问多维数组

时间:2015-05-27 14:58:59

标签: javascript arrays multidimensional-array

我正在编写一个应该读取csv文件的函数,然后对其进行处理,以便我可以使用它来生成HTML表格。基本上,函数的输出应该是一个多维数组,如下所示:[["prop", "type"], ["prop", "type"]...]

问题在于我尝试使用"prop"访问importProps[0][0],实际上会输出"p"。最奇怪的是控制台在函数的最后两行输出;我认为它们是同一个东西,但它们提供了不同的输出。我不明白为什么我无法访问console.log(elem[0])行上的整个字符串。

这是我的代码。

function importProperties() {
    //read the data
    var importProps = readTextFile(getProjectDirectory() + '/test.csv'); //outputs ["prop; type", "prop; type"...]
    // process it to become [["prop", "type"], ["prop", "type"]...]
    for (var i = 0; i < importProps.length; i++) {
        var elem = importProps[i].split(';');
        importProps[i] = elem;  
        console.log(elem[0]); // Outputs $"prop" 
        console.log(importProps[i][0]); // Outputs $"p" <--WHY ? 
    }

我原来的循环是

for (var i = 0; i < importProps.length; i++) {
    importProps[i] = importProps[i].split(';'); 
}

产生相同的意外结果。我刚刚添加了元素变量用于调试目的。

顺便说一句,我是在一个软件嵌入式浏览器中编写的,它通过提供的API与软件进行通信。此浏览器中的控制台只具有非常有限的功能,因此很难进行适当的调试。

2 个答案:

答案 0 :(得分:0)

不幸的是,我不能发表评论:( 代码在控制台中运行良好,并提供您所要求的内容。

我的猜测是在实际代码中你分配了字符串而不是数组 importProps [i] = elem [0];

var importProps = ["prop; type", "prop; type"];
for (var i = 0; i < importProps.length; i++) {
    var elem = importProps[i].split(';');
    importProps[i] = elem[0]; //Maybe you have this line live instead of importProps[i] = elem;?
    console.log(elem[0]);
    console.log(importProps[i][0]);
}

答案 1 :(得分:0)

我终于找到了解决方案。嵌入在软件中的浏览器实际上基于Webkit。在我按照迈克的建议尝试粘贴Firefox中的代码之后,我得到了与他相同的结论:它运行得很好。

经过一些研究和多次typeof陈述后,我发现了问题的来源。它实际上来自importProps[i] = elem;行。 elem是一个数组(typeof输出object),而importProps[i]是一个字符串(typeof输出string)。我将elem分配给importProps[i]后,importProps[i]仍然是一个字符串! (typeof返回string)。

for (var i = 0; i < importProps.length; i++) {
    var elem = importProps[i].split(';');
    importProps[i] = elem;
    console.log(typeof importProps[i]); // Logs 'string'!!! Firefox logs 'object' here
    console.log(typeof elem);           // Logs 'object' 
};

在Firefox中并非如此,我不知道为什么Webkit会实现这种行为。解决方案最终是创建一个多维数组并将拆分字符串分配给它。

function importProperties() {
    //read the data ["prop;type", "prop;type"]
    var importProps = xxxAPI.readTextFile(xxxAPI.getProjectDirectory() + '/test.csv');
    //process to be [["prop", "type"], ["prop", "type"]...]
    var importPropsArray = [[]]
    for (var i = 0; i < importProps.length; i++) {
        var elem = importProps[i].split(';');
        importPropsArray[i] = elem;
    };
    return importPropsArray;
};

我不知道这是一种错误还是一种想要的行为,但这很奇怪。