我正在编写一个应该读取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与软件进行通信。此浏览器中的控制台只具有非常有限的功能,因此很难进行适当的调试。
答案 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;
};
我不知道这是一种错误还是一种想要的行为,但这很奇怪。