当我在console.log中时,我的数组显示长度为零。我检查过它是一个使用Array.isArray
返回true
的数组。同时打印出数组值以确保它们存在并显示在控制台中:
[]
0: "a"
1: "b"
2: "c"
3: "d"
length: 4
__proto__: Array(0)
我看到__proto__: Array(0)
并且我假设这意味着它是一个0长度的数组但是如何使其长度非零以便我可以迭代它?
我的想法是这个功能可能是异步的,但我不确定如何解决这个问题。
参考代码:
var list=[]
//getting data from a database
snapshot.forEach(function (node) {
list.push(node.val())
console.log(node.val()) //values print out
})
console.log(list) //array is length zero
我基本上尝试在此代码之后添加for循环来读取每个值并将其用于其他内容。但是我不能遍历数组,因为它注册为空。
答案 0 :(得分:1)
对于其他面临类似问题的人:
您很有可能在异步函数中填充数组。
function asyncFunction(list){
setTimeout(function(){
list.push('a');
list.push('b');
list.push('c');
console.log(list.length); // array length is 3 - after two seconds
}, 2000); // 2 seconds timeout
}
var list=[];
//getting data from a database
asyncFunction(list);
console.log(list.length) //array is length zero - after immediately
console.log(list) // console will show all values if you expand "[]" after two seconds
答案 1 :(得分:0)
我需要查看更多代码,但这是您想要的。
var arr = [1, 3, 5, 6];
console.log(arr.length);
for (var i = 0; i < arr.length; i++){
console.log(arr[i]);
}
答案 2 :(得分:0)
__proto__
不是你的对象,它是原型的访问者。
__proto__
的{{1}}属性是一个访问者属性(a 暴露内部的getter函数和setter函数 对象的Object.prototype
(对象或[[Prototype]]
) 它被访问了。使用
null
是有争议的,并且不鼓励。
答案 3 :(得分:0)
我遇到了同样的问题,当我如下所示记录变量快照时,变量在执行后的大多数逻辑之后被记录下来,因为以后可以使用,这就是为什么无法访问Array值的原因。
let admins = []
adminRef.once('value',(snapshot)=>{
console.log(snapshot);
snapshot.forEach(data=>{
admins.push(data.key);
})
})
因此对其进行了更改,以便快照变量可用后便执行了下面的逻辑
adminRef.once('value',(snapshot)=>{
if(snapshot){
console.log(snapshot);
snapshot.forEach(data=>{
admins.push(data.key);
})}
答案 4 :(得分:0)
类似的问题,而不是解决方案。
printVertices(){
console.log(Array.isArray(this.vertices), this.vertices)
let head = "<head> "
this.vertices = []
console.log(this.vertices)
this.vertices.map(data => head += data.data + " ")
head += "<tail>"
console.log(head)
}
}
,正如您从我的终端看到的那样,请看顶部!它显示Array.isarray(myarray)是true,this.vertices的console.log是链表,然后在底部显示一个空数组。但是,this.vertices将linkedList打印到控制台