Saya telah mencoba beberapa pendekatan tentang cara menemukan objek dalam array, di mana ID = var, dan jika ditemukan, hapus objek dari array dan kembalikan objek array baru.
Data:
[
{"id":"88","name":"Lets go testing"},
{"id":"99","name":"Have fun boys and girls"},
{"id":"108","name":"You are awesome!"}
]
Saya dapat mencari array menggunakan jQuery $ grep;
var id = 88;
var result = $.grep(data, function(e){
return e.id == id;
});
Tetapi bagaimana saya bisa menghapus seluruh objek ketika id == 88, dan mengembalikan data seperti ini:
Data:
[
{"id":"99","name":"Have fun boys and girls"},
{"id":"108","name":"You are awesome!"}
]
slice
fungsi dan sedikitfor
putaran?Jawaban:
Cukup filter dengan predikat sebaliknya:
var data = $.grep(data, function(e){ return e.id != id; });
sumber
slice
juga tidak menghapus apa pun. Tidak yakin apa yang Anda maksud. Jika Anda sendiri memiliki masalah tertentu, Anda mungkin ingin mengajukan pertanyaan baru .data.filter(e => !ids.includes(e.id))
berikut adalah solusi jika Anda tidak menggunakan jquery:
myArray = myArray.filter(function( obj ) { return obj.id !== id; });
sumber
findIndex()
dan kemudiansplice(index, 1)
pada array induk?arr = arr.filter( obj => obj.id !== id);
Anda dapat menyederhanakan ini, dan sebenarnya tidak perlu menggunakan jquery di sini.
var id = 88; for(var i = 0; i < data.length; i++) { if(data[i].id == id) { data.splice(i, 1); break; } }
Cukup lakukan iterasi melalui daftar, temukan id yang cocok, sambungan, lalu putus untuk keluar dari loop Anda
sumber
i=data.length; i > 0; i--
dan jangan gunakanbreak
.i = data.length
akan merusak apa pundata[i]
, itu harus sepertii=data.length -1 ; i > -1; i--
Ada metode baru untuk melakukan ini di ES6 / 2015 menggunakan findIndex dan operator spread array:
const index = data.findIndex(obj => obj.id === id); const newData = [ ...data.slice(0, index), ...data.slice(index + 1) ]
Anda dapat mengubahnya menjadi fungsi untuk digunakan kembali nanti seperti ini:
function remove(array, key, value) { const index = array.findIndex(obj => obj[key] === value); return index >= 0 ? [ ...array.slice(0, index), ...array.slice(index + 1) ] : array; }
Dengan cara ini Anda bisa menghapus item dengan kunci berbeda menggunakan satu metode (dan jika tidak ada objek yang memenuhi kriteria, Anda mendapatkan kembali larik asli):
const newData = remove(data, "id", "88"); const newData2 = remove(data, "name", "You are awesome!");
Atau Anda dapat meletakkannya di Array.prototype Anda:
Array.prototype.remove = function (key, value) { const index = this.findIndex(obj => obj[key] === value); return index >= 0 ? [ ...this.slice(0, index), ...this.slice(index + 1) ] : this; };
Dan gunakan dengan cara ini:
const newData = data.remove("id", "88"); const newData2 = data.remove("name", "You are awesome!");
sumber
Dengan asumsi bahwa id itu unik dan Anda hanya perlu menghapus satu elemen
splice
saja sudah cukup:var data = [ {"id":"88","name":"Lets go testing"}, {"id":"99","name":"Have fun boys and girls"}, {"id":"108","name":"You are awesome!"} ], id = 88; console.table(data); $.each(data, function(i, el){ if (this.id == id){ data.splice(i, 1); } }); console.table(data);
sumber
each(data,function(idx,ele)
. Saya akan menagih Anda nanti untuk 30 menit saya menyia-nyiakan mencari tahu itu :)var items = [ {"id":"88","name":"Lets go testing"}, {"id":"99","name":"Have fun boys and girls"}, {"id":"108","name":"You are awesome!"} ];
Jika Anda menggunakan jQuery, gunakan jQuery.grep seperti ini:
items = $.grep(items, function(item) { return item.id !== '88'; }); // items => [{ id: "99" }, { id: "108" }]
Menggunakan ES5 Array.prototype.filter :
items = items.filter(function(item) { return item.id !== '88'; }); // items => [{ id: "99" }, { id: "108" }]
sumber
jQuery
peta sebagai filter.Mungkin Anda sedang mencari
$.grep()
fungsi:arr = [ {"id":"88","name":"Lets go testing"}, {"id":"99","name":"Have fun boys and girls"}, {"id":"108","name":"You are awesome!"} ]; id = 88; arr = $.grep(arr, function(data, index) { return data.id != id });
sumber
sift
adalah filter koleksi yang andal untuk operasi seperti ini dan yang lebih canggih. Ia bekerja di sisi klien di browser atau sisi server di node.js.var collection = [ {"id":"88","name":"Lets go testing"}, {"id":"99","name":"Have fun boys and girls"}, {"id":"108","name":"You are awesome!"} ]; var sifted = sift({id: {$not: 88}}, collection);
Mendukung filter seperti
$in
,$nin
,$exists
,$gte
,$gt
,$lte
,$lt
,$eq
,$ne
,$mod
,$all
,$and
,$or
,$nor
,$not
,$size
,$type
, dan$regex
, dan berusaha untuk menjadi API-kompatibel dengan koleksi MongoDB penyaringan.sumber
Array.prototype.removeAt = function(id) { for (var item in this) { if (this[item].id == id) { this.splice(item, 1); return true; } } return false; }
Ini seharusnya berhasil, jsfiddle
sumber
Pastikan Anda memaksa id objek menjadi integer jika Anda menguji kesetaraan yang ketat:
var result = $.grep(data, function(e, i) { return +e.id !== id; });
Demo
sumber
Jika Anda menggunakan js garis bawah, mudah untuk menghapus objek berdasarkan kunci. http://underscorejs.org . Contoh:
var temp1=[{id:1,name:"safeer"}, //temp array {id:2,name:"jon"}, {id:3,name:"James"}, {id:4,name:"deepak"}, {id:5,name:"ajmal"}]; var id = _.pluck(temp1,'id'); //get id array from temp1 var ids=[2,5,10]; //ids to be removed var bool_ids=[]; _.each(ids,function(val){ bool_ids[val]=true; }); _.filter(temp1,function(val){ return !bool_ids[val.id]; });
sumber
A setuju dengan jawaban, cara sederhana jika Anda ingin mencari dan menolak id dan menghapusnya adalah seperti kode di bawah ini.
var obj = JSON.parse(data); var newObj = obj.filter(item=>item.Id!=88);
sumber