数组/列表长度为零,但数组不为空

时间:2018-01-05 20:05:35

标签: javascript arrays vue.js

当我在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循环来读取每个值并将其用于其他内容。但是我不能遍历数组,因为它注册为空。

5 个答案:

答案 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打印到控制台enter image description here