我该如何在JavaScript中动态创建一个数组列表,在开发者控制台上实际显示为一个数组列表?
重新表述一下这个问题:有很多示例可以做到这一点,我的代码也可以工作,但是使用这两种方法得到了两个非常不同的结果:
我尝试了这个方法:
var volume = [];
for (i = 0; i < json.length; i++) {
var item = new Array(2);
item[0] = json[i].json_date;
item[1] = json[i].volume;
volume.push(item);
}
所以,这段代码可以运行,并且似乎创建了一个数组的数组,但是在开发者控制台中,console.log(typeof volume[0]) 的结果为 undefined。
如果我手动创建数组,它就会更好地工作:
var volume = [
[1313964000000,23.17],
[1314050400000,23.78],
[1314741600000,25.24],
[1314828000000,24.77],
[1440021600000,82.69]
];
现在console.log(typeof volume[0])是对象,而console.log(volume)的结果为:(5) [Array(2), Array(2), Array(2), Array(2), Array(2)]。这就是我需要的,不仅仅是[]。
我已经花了整整一天的时间寻找答案,并尝试了许多代码的变化,但似乎找不到能动态创建该卷数组以正确显示为数组的代码。
还有其他人遇到过这种情况吗?
以下是完整的代码:
var volume = [];
fetch("http://localhost:3000/api/v1/TSLA").then(function(response) {
if(response.ok) {
response.json().then(function(json) {
for (i = 0; i < Object.keys(json).length; i++){
volume.push(new Array(json[i].json_date, json[i].volume));
}
});
} else {
console.log('Network request failed with response ' +
response.status + ': ' + response.statusText);
}
});
console.log(volume);
所以,oknawe的答案帮助我解决了这个问题,但从某种意义上说,问题仍未得到解答,因为volume数组仅在fetch函数内可用。在代码后面,数据仍然存在,但单独的元素测试为未定义...
json
是什么样子?你是怎么得到它的?(尝试将其转储到控制台。) - Ashton Wiersdorfjson.length
将是undefined
,因此循环永远不会被迭代。 - joknawe