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]);
}
}