组合数组时无法读取未定义的属性'push'
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了组合数组时无法读取未定义的属性'push'相关的知识,希望对你有一定的参考价值。
当我将数组的内容推送到另一个数组时
“未捕获的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语句中出现此错误?非常感谢!
你得到错误,因为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]; }
}
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]);
如果未初始化数组空白,则会在角度中发生此错误。 举个例子: 用户列表:任何[]; this.userlist = []; 要么 userlist:any = [];
回答你的问题是简单的顺序是不是一个对象使它成为一个数组。 var order = new Array(); order.push(/ item to push /);当出现此错误时,只检查错误属性的左侧,在这种情况下,它是push,这是order []所以它是未定义的。
order []未定义,这就是原因
只需将order [1] ... [n]定义为=某个值
这应该解决它
您不需要提供索引。
不要做order[0].push(a[i])
,而是做order.push(a[i])
。
以上是关于组合数组时无法读取未定义的属性'push'的主要内容,如果未能解决你的问题,请参考以下文章
在遍历两个数组时无法读取未定义的属性'id':Angular
无法读取未定义类型错误的属性“推送”:无法读取未定义错误的属性“推送”
无法读取 nativescript angular2 中未定义的属性全局数组