Javascript 无法读取属性';推动';组合数组时的未定义值

Javascript 无法读取属性';推动';组合数组时的未定义值,javascript,jquery,web,console,Javascript,Jquery,Web,Console,将一个数组的内容推送到另一个数组时,我得到 “未捕获类型错误:无法读取未定义”错误的属性“推送” 在这个片段中 var order=newobject(),stack=[]; 对于(vari=0;i0){阶[1]。推(a[i]);} if(parseInt(a[i].daysleft)

将一个数组的内容推送到另一个数组时,我得到

“未捕获类型错误:无法读取未定义”错误的属性“推送” 在这个片段中

var order=newobject(),stack=[];
对于(vari=0;i0){阶[1]。推(a[i]);}
if(parseInt(a[i].daysleft)<0{order[2].push(a[i]);}
}
为什么在第二个if语句中会出现此错误?
非常感谢

您得到错误是因为
顺序[1]
未定义的

该错误消息意味着,在代码中的某个地方,试图访问具有某个名称的属性(这里是“push”),但引用的基础实际上是
未定义的
,而不是对象。因此,要找到问题,您需要查找引用该属性名称(“push”)的代码,并查看其左边的内容。在本例中,代码是

if(parseInt(a[i].daysleft) > 0){ order[1].push(a[i]); }
这意味着代码期望
order[1]
是一个数组。然而,它不是一个数组;它是
未定义的
,因此您会得到错误。为什么它未定义?好吧,根据你的问题,你的代码没有做任何事情来让它变成其他任何东西

现在,如果您只想在对象的特定属性中放置
a[i]
,那么根本不需要调用
.push()

var order = [], stack = [];
for(var i=0;i<a.length;i++){
    if(parseInt(a[i].daysleft) == 0){ order[0] = a[i]; }
    if(parseInt(a[i].daysleft) > 0){ order[1] = a[i]; }
    if(parseInt(a[i].daysleft) < 0){ order[2] = a[i]; }
}
var顺序=[],堆栈=[];
对于(vari=0;i0){order[1]=a[i];}
if(parseInt(a[i].daysleft)<0{order[2]=a[i];}
}

订单
是一个
对象
,而不是
数组()

push()
用于阵列

提及

尽管如此,请尝试以下操作(但子对象必须是
Arrays()
):

或者,您可以将order用作非数组对象的数组:

var order = new Array();

order.push(a[n]);

你的问题的答案很简单,顺序不是一个对象,而是一个数组。 var order=新数组(); 订单推送(/要推送的项目/);
当出现此错误时,只需检查错误所在属性的左侧。在本例中,错误是push,即order[],因此未定义。

order[]未定义,这就是原因

只需将顺序[1]…[n]定义为=某个值


这应该可以修复它

您不需要给出索引


不要执行
顺序[0]。按(a[i])
,只需执行
顺序。按(a[i])

此错误在未初始化阵列空白时发生。
例如:

userlist: any[ ];
this.userlist = [ ]; 


在大多数情况下,必须初始化数组

let list: number[] = [];

我用typescript以下面的方式进行了修复

  • 定义并初始化firest
  • 页码:编号[]=[]

  • 然后填充它

    for (let i = 1; i < 201; i++) {
        this.pageNumbers.push(i);
    }
    
    for(设i=1;i<201;i++){
    这个。页码。推(i);
    }
    

  • 通常,Push方法用于在数组末尾添加元素

    这里,您对对象使用了push方法,而不是“order”数组

    调试的步骤

    将对象更改为空数组

    var order = [], stack = [];
    
    现在,您可以像往常一样对该数组使用push方法

    对该“订单”数组使用push方法;对数组调用push方法时不应使用数组索引。只需使用数组的名称即可

    var order = [], stack = [];
    
    for(var i = 0; i<a.length; i++){
    
       if(parseInt(a[i].daysleft) == 0){ 
         order.push(a[i]); 
       }
    
       if(parseInt(a[i].daysleft) > 0){ 
         order.push(a[i]); 
       }
    
       if(parseInt(a[i].daysleft) < 0){ 
         order.push(a[i]); 
       }
    }
    
    var顺序=[],堆栈=[];
    对于(vari=0;i0){
    订单推送(a[i]);
    }
    如果(parseInt(a[i].daysleft)<0{
    订单推送(a[i]);
    }
    }
    
    如果它被定义为对象。。我不应该在那里使用任何数字吗?@d3nm4k不。你必须初始化
    order[0]
    order[1]
    ,和
    order[2]
    ,才能有一些值(我猜是数组)。那不会为你做的;为什么会这样?哦,明白了!我会花更多的时间来获取订单[1]=[];出来非常感谢。即使我将其定义为数组,它仍然会给我相同的错误。@d3nm4k是否只想将
    a[i]
    的值放在位置0、1或2?如果是这样,就不要为此使用
    .push()
    .push()
    方法用于向数组末尾添加值。如果需要安全键入的数组,则,
    public\u userList:User[]=[]
    for (let i = 1; i < 201; i++) {
        this.pageNumbers.push(i);
    }
    
    var order = [], stack = [];
    
    var order = [], stack = [];
    
    for(var i = 0; i<a.length; i++){
    
       if(parseInt(a[i].daysleft) == 0){ 
         order.push(a[i]); 
       }
    
       if(parseInt(a[i].daysleft) > 0){ 
         order.push(a[i]); 
       }
    
       if(parseInt(a[i].daysleft) < 0){ 
         order.push(a[i]); 
       }
    }