Javascript 对象数组:无法读取onchange事件内部未定义的属性“id”
我一直在寻找一种方法,如果id变量等于一个对象的id,那么可以从对象数组中删除单个对象 我使用数组来知道选中了哪些复选框,以便收集相关信息进行进一步处理 例如: 快速选择复选框时出现的错误:Javascript 对象数组:无法读取onchange事件内部未定义的属性“id”,javascript,jquery,arrays,checkbox,Javascript,Jquery,Arrays,Checkbox,我一直在寻找一种方法,如果id变量等于一个对象的id,那么可以从对象数组中删除单个对象 我使用数组来知道选中了哪些复选框,以便收集相关信息进行进一步处理 例如: 快速选择复选框时出现的错误: Uncaught TypeError: Cannot read property 'id' of undefined at vicerewevi.js:33 at Function.each (jquery-3.1.0.js:368) at HTMLInputElement.<
Uncaught TypeError: Cannot read property 'id' of undefined
at vicerewevi.js:33
at Function.each (jquery-3.1.0.js:368)
at HTMLInputElement.<anonymous> (vicerewevi.js:32)
at HTMLInputElement.dispatch (jquery-3.1.0.js:5110)
at HTMLInputElement.elemData.handle (jquery-3.1.0.js:4918)
我在上发现了下面的代码,因此之前从未使用过自定义原型:
Array.prototype.delete = function(pos){
this[pos] = undefined;
var len = this.length - 1;
for(var a = pos;a < this.length - 1;a++){
this[a] = this[a+1];
}
this.pop();
}
因为您从数组中删除了条目,所以下次对其进行迭代时,您将得到一个未定义的值,用于数组中的特定间隙。显然,它没有id属性
要解决这个问题,不要使用delete,而是使用filter创建一个新的过滤数组,该数组将不会有这样的间隙
替换:
$.each(jsonobjects, function( index, value ) {
if (value.id == id ) {
jsonobjects.delete(index)
}
});
…与:
jsonobjects = jsonobjects.filter(function( value ) {
return value.id !== id;
});
或者,如果要坚持使用jQuery方法,请使用$.grep:
因为您从数组中删除了条目,所以下次对其进行迭代时,您将得到一个未定义的值,用于数组中的特定间隙。显然,它没有id属性
要解决这个问题,不要使用delete,而是使用filter创建一个新的过滤数组,该数组将不会有这样的间隙
替换:
$.each(jsonobjects, function( index, value ) {
if (value.id == id ) {
jsonobjects.delete(index)
}
});
…与:
jsonobjects = jsonobjects.filter(function( value ) {
return value.id !== id;
});
或者,如果要坚持使用jQuery方法,请使用$.grep:
我一直在寻找一种方法,如果id变量等于一个对象的id,那么可以从对象数组中删除单个对象
常数arr=[
{id:0},
{id:1},
{id:2},
{id:3},
{id:4},
{id:5}
];
const removeById=arr,id=>arr.filtere=>e.id!==身份证件
const no2=移除byidarr,2;
const no5=移除byidarr,5;
1.logno2;
控制台logno5;
我一直在寻找一种方法,如果id变量等于一个对象的id,那么可以从对象数组中删除单个对象
常数arr=[
{id:0},
{id:1},
{id:2},
{id:3},
{id:4},
{id:5}
];
const removeById=arr,id=>arr.filtere=>e.id!==身份证件
const no2=移除byidarr,2;
const no5=移除byidarr,5;
1.logno2;
控制台logno5 使用Array.filter方法,像这样将JSONObject重新分配给筛选后的数组,而不是您创建的delete方法
jsonObjects=jsonObjects.filtervalue,索引=>{
返回值.id!==id;
}
我希望这有助于使用Array.filter方法,并像这样将JSONObject重新分配给筛选后的数组,而不是您创建的delete方法
jsonObjects=jsonObjects.filtervalue,索引=>{
返回值.id!==id;
}
我希望这对我有所帮助当我尝试解决这个问题时,这对我很有效
当我尝试解决这个问题时,这个方法对我有效
您是否尝试过value.getAttributeid==id代替value.id==id?如果它是一个元素?顺便说一句,你可以不用那种奇怪的delete方法,只做jsonobjects.stipleindex,1@JonasW. 谢谢,我还在simple for循环中添加了hasownproperty,而不是$。为了检查数组中的元素是否不是数组函数,您是否尝试过value.getAttributeid==id代替value.id==id?如果它是一个元素?顺便说一句,你可以不用那种奇怪的delete方法,只做jsonobjects.stipleindex,1@JonasW. 谢谢,我还在simple for循环中添加了hasownproperty,而不是$。为了检查数组中的元素是否不是数组函数,如果JSONObject有两个连续的对象,并且都具有要删除的id值,则可以在数组中保留一个条目。在这种情况下,只有两个元素中的第一个将被删除,因为拼接将所有剩余元素向后移动一个索引位置,并且for循环将不会重新访问现在具有下一项的同一索引。例如,请参阅。如果JSONObject有两个连续的对象,并且都具有要删除的id值,则这可能会在数组中留下一个条目。在这种情况下,只有两个元素中的第一个将被删除,因为拼接将所有剩余元素向后移动一个索引位置,并且for循环将不会重新访问现在具有下一项的同一索引。例如,见。
for (var k in jsonobjects){
if (jsonobjects.hasOwnProperty(k)) {
if (jsonobjects[k].id == id) {
jsonobjects.splice(k, 1)
}
}
}