组合数组时无法读取未定义的属性'push'

问题描述 投票:44回答:6

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

“未捕获的TypeError:在此代码段中无法读取未定义的属性'push'错误。

var order = new Object(), stack = [];
for(var i=0;i<a.length;i++){
    if(parseInt(a[i].daysleft) == 0){ order[0].push(a[i]); }
    if(parseInt(a[i].daysleft) > 0){ order[1].push(a[i]); }
    if(parseInt(a[i].daysleft) < 0){ order[2].push(a[i]); }
}

为什么我在第二个if语句中出现此错误?非常感谢!

javascript jquery web console
6个回答
51
投票

你得到错误,因为order[1]undefined

该错误消息意味着在代码中的某处,正在尝试访问具有某个名称的属性(此处为“push”),但是参考的基础实际上是undefined而不是对象。因此,要找到问题,您需要查找引用该属性名称(“push”)的代码,并查看其左侧的内容。在这种情况下,代码是

if(parseInt(a[i].daysleft) > 0){ order[1].push(a[i]); }

这意味着代码期望order[1]是一个数组。然而,它不是一个阵列;它是undefined,所以你得到错误。为什么是undefined?好吧,根据你的问题,你的代码没有做任何其他事情。

现在,如果你只想将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]; }
}

18
投票

order是一个Object,而不是Array()

push()用于阵列。

请参阅to this post

试试这个(但你的子对象必须是Arrays()):

var order = new Array();

// initialize order; n = index
order[n] = new Array();

// and then you can perform push()
order[n].push(some_value);

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

var order = new Array();

order.push(a[n]);

6
投票

如果未初始化数组空白,则会在角度中发生此错误。 举个例子: 用户列表:任何[]; this.userlist = []; 要么 userlist:any = [];


0
投票

回答你的问题是简单的顺序是不是一个对象使它成为一个数组。 var order = new Array(); order.push(/ item to push /);当出现此错误时,只检查错误属性的左侧,在这种情况下,它是push,这是order []所以它是未定义的。


0
投票

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

只需将order [1] ... [n]定义为=某个值

这应该解决它


0
投票

您不需要提供索引。

不要做order[0].push(a[i]),而是做order.push(a[i])

© www.soinside.com 2019 - 2024. All rights reserved.