组合数组时无法读取未定义的属性'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 中未定义的属性全局数组

无法读取未定义的属性推送

Vue 组合 API:无法读取未定义的属性“$createElement”

TypeError.无法读取未定义的'$__'属性。无法读取未定义的'$__'属性 - Mongoose v5.^。