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

d3n*_*m4k 51 javascript console jquery web

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

"未捕获的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]); }
}
Run Code Online (Sandbox Code Playgroud)

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

Poi*_*nty 56

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

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

if(parseInt(a[i].daysleft) > 0){ order[1].push(a[i]); }
Run Code Online (Sandbox Code Playgroud)

这意味着代码期望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]; }
}
Run Code Online (Sandbox Code Playgroud)


Kyl*_*uel 21

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

push() 用于数组.

请参阅这篇文章

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

var order = new Array();

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

// and then you can perform push()
order[n].push(some_value);
Run Code Online (Sandbox Code Playgroud)

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

var order = new Array();

order.push(a[n]);
Run Code Online (Sandbox Code Playgroud)


小智 14

当您未初始化数组空白时,会在角度发生此错误。
例如:
userlist:any [];
this.userlist = [];
或用户列表
:any = [];

  • 如果你想要一个安全类型的数组,那么`public _userList: User[] = []` (2认同)

Aki*_*_MJ 11

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

let list: number[] = [];
Run Code Online (Sandbox Code Playgroud)