Я искал способ удалить отдельный объект из массива объектов, если переменная id равна идентификатору объекта.
Я использую массив, чтобы узнать, какие флажки выбраны, так что соответствующая информация будет собираться для дальнейшей обработки.
пример: https://jsbin.com/vicerewevi/edit?html,js,output
Ошибка, которую я получаю, когда быстро устанавливаю флажки:
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)
выше ошибка возникает в строке, если value.id == id:
// if checkbox is checked, add object to array and if unchecked remove object by 'id' from array
$('.checkbox').change( function(){
var id = parseInt($(this).attr('data-id'))
var foo = $(this).parent().siblings().find('#foo').val()
var bar = $(this).parent().siblings().find('#bar').val()
if($(this).prop('checked')) {
var obj = {'id': id, 'foo': foo, 'bar': bar}
jsonobjects.push(obj)
} else {
$.each(jsonobjects, function( index, value ) {
if (value.id == id ) {
jsonobjects.delete(index)
}
});
}
countChecked() // update count of checkboxes
console.log(JSON.stringify(jsonobjects))
$('#output').html(JSON.stringify(jsonobjects, null, ""))
});
Я нашел этот код ниже на SO (никогда раньше не работал с пользовательскими прототипами), который я пробовал:
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();
}