Bagaimana saya bisa menghapus objek dari sebuah array?
Saya berharap untuk menghapus objek yang meliputi nama Kristian
dari someArray
. Misalnya:
someArray = [{name:"Kristian", lines:"2,5,10"},
{name:"John", lines:"1,19,26,96"}];
Aku ingin mencapai:
someArray = [{name:"John", lines:"1,19,26,96"}];
Anda dapat menggunakan beberapa metode untuk menghapus item(s) dari sebuah Array:
//1
someArray.shift(); // first element removed
//2
someArray = someArray.slice(1); // first element removed
//3
someArray.splice(0, 1); // first element removed
//4
someArray.pop(); // last element removed
//5
someArray = someArray.slice(0, a.length - 1); // last element removed
//6
someArray.length = someArray.length - 1; // last element removed
Jika anda ingin menghapus elemen pada posisi x
, gunakan:
someArray.splice(x, 1);
Atau
someArray = someArray.slice(0, x).concat(someArray.slice(-x));
Balasan untuk komentar @chill182: anda dapat menghapus satu atau lebih elemen dari array menggunakan Array.filter
, atau Array.sambatan
dipadu dengan Array.findIndex
(lihat MDN), misalnya
// non destructive filter > noJohn = John removed, but someArray will not change
let someArray = getArray();
let noJohn = someArray.filter( el => el.name !== "John" );
log("non destructive filter > noJohn = ", format(noJohn));
log(`**someArray.length ${someArray.length}`);
// destructive filter/reassign John removed > someArray2 =
let someArray2 = getArray();
someArray2 = someArray2.filter( el => el.name !== "John" );
log("", "destructive filter/reassign John removed > someArray2 =",
format(someArray2));
log(`**someArray2.length ${someArray2.length}`);
// destructive splice /w findIndex Brian remains > someArray3 =
let someArray3 = getArray();
someArray3.splice(someArray3.findIndex(v => v.name === "Kristian"), 1);
someArray3.splice(someArray3.findIndex(v => v.name === "John"), 1);
log("", "destructive splice /w findIndex Brian remains > someArray3 =",
format(someArray3));
log(`**someArray3.length ${someArray3.length}`);
function format(obj) {
return JSON.stringify(obj, null, " ");
}
function log(...txt) {
document.querySelector("pre").textContent += `${txt.join("\n")}\n`
}
function getArray() {
return [ {name: "Kristian", lines: "2,5,10"},
{name: "John", lines: "1,19,26,96"},
{name: "Brian", lines: "3,9,62,36"} ];
}
<pre>
**Results**
</pre>
Saya sarankan menggunakan underscore.js atau sugar.js untuk tugas-tugas umum seperti ini:
// underscore.js
someArray = _.reject(someArray, function(el) { return el.Name === "Kristian"; });
// sugar.js
someArray.remove(function(el) { return el.Name === "Kristian"; });
dalam kebanyakan proyek, memiliki satu set metode pembantu yang disediakan oleh perpustakaan seperti ini cukup berguna.
Bersih solusi akan menggunakan Array.filter
:
var filtered = someArray.filter(function(el) { return el.Name != "Kristian"; });
Masalah dengan ini adalah bahwa hal itu tidak bekerja pada IE < 9. Namun, anda dapat menyertakan kode dari sebuah library Javascript (misalnya underscore.js) yang menerapkan ini untuk setiap browser.
Anda "para" seperti yang ditunjukkan adalah tidak valid JavaScript sintaks. Kurung kurawal {}
adalah untuk objek dengan properti pasangan nama/nilai, tetapi tanda kurung siku []
adalah untuk array - seperti:
someArray = [{name:"Kristian", lines:"2,5,10"}, {name:"John", lines:"1,19,26,96"}];
Dalam hal ini, anda dapat menggunakan .splice()
metode untuk menghapus item. Untuk menghapus item pertama (index 0), mengatakan:
someArray.splice(0,1);
// someArray = [{name:"John", lines:"1,19,26,96"}];
Jika anda don't tahu index tapi ingin mencari melalui array untuk menemukan item dengan nama "Kristian" untuk menghapus, anda bisa dengan ini:
for (var i =0; i < someArray.length; i++)
if (someArray[i].name === "Kristian") {
someArray.splice(i,1);
break;
}
EDIT: saya hanya melihat pertanyaan anda adalah ditandai dengan "jQuery", sehingga anda bisa mencoba $.grep()
metode:
someArray = $.grep(someArray,
function(o,i) { return o.name === "Kristian"; },
true);
ES2015
let someArray = [
{name:"Kristian", lines:"2,5,10"},
{name:"John", lines:"1,19,26,96"},
{name:"Kristian", lines:"2,58,160"},
{name:"Felix", lines:"1,19,26,96"}
];
someArray = someArray.filter(person => person.name != 'John');
Ini akan menghapus John!
Anda bisa menggunakan array.filter().
misalnya
someArray = [{name:"Kristian", lines:"2,5,10"},
{name:"John", lines:"1,19,26,96"}];
someArray = someArray.filter(function(returnableObjects){
return returnableObjects.name !== 'Kristian';
});
//someArray will now be = [{name:"John", lines:"1,19,26,96"}];
Panah fungsi:
someArray = someArray.filter(x => x.name !== 'Kristian')
Saya telah membuat sebuah fungsi dinamis yang mengambil objek Array, Kunci dan nilai dan mengembalikan array yang sama setelah menghapus objek yang diinginkan:
function removeFunction (myObjects,prop,valu)
{
return myObjects.filter(function (val) {
return val[prop] !== valu;
});
}
Lengkap Contoh: [DEMO][1]
var obj = {
"results": [
{
"id": "460",
"name": "Widget 1",
"loc": "Shed"
}, {
"id": "461",
"name": "Widget 2",
"loc": "Kitchen"
}, {
"id": "462",
"name": "Widget 3",
"loc": "bath"
}
]
};
function removeFunction (myObjects,prop,valu)
{
return myObjects.filter(function (val) {
return val[prop] !== valu;
});
}
console.log(removeFunction(obj.results,"id","460"));
Anda juga bisa mencoba melakukan sesuatu seperti ini:
var myArray = [{'name': 'test'}, {'name':'test2'}];
var myObject = {'name': 'test'};
myArray.splice(myArray.indexOf(myObject),1);
Memilih untuk UndercoreJS secara sederhana bekerja dengan array.
_.tanpa() fungsi membantu untuk menghapus sebuah elemen:
_.without([1, 2, 1, 0, 3, 1, 4], 0, 1);
=> [2, 3, 4]
Dengan ES 6 panah fungsi
let someArray = [
{name:"Kristian", lines:"2,5,10"},
{name:"John", lines:"1,19,26,96"}
];
let arrayToRemove={name:"Kristian", lines:"2,5,10"};
someArray=someArray.filter((e)=>e.name !=arrayToRemove.name && e.lines!= arrayToRemove.lines)
Meskipun hal ini mungkin tidak tepat untuk situasi ini saya menemukan hari lain yang anda juga dapat menggunakan tombol hapus
kata kunci untuk menghapus item dari array jika anda don't perlu untuk mengubah ukuran dari array misalnya
var myArray = [1,2,3];
delete myArray[1];
console.log(myArray[1]); //undefined
console.log(myArray.length); //3 - doesn't actually shrink the array down
Jawaban ini
for (var i =0; i < someArray.length; i++)
if (someArray[i].name === "Kristian") {
someArray.splice(i,1);
}
tidak bekerja untuk beberapa catatan memenuhi syarat. Jika anda memiliki dua tersebut berturut-turut catatan, hanya yang pertama dihapus, dan yang lain diabaikan. Anda harus menggunakan:
for (var i = someArray.length - 1; i>= 0; i--)
...
sebaliknya .
Solusi sederhana akan membuat peta yang menyimpan indeks untuk masing-masing objek berdasarkan nama, seperti ini:
//adding to array
var newPerson = {name:"Kristian", lines:"2,5,10"}
someMap[ newPerson.name ] = someArray.length;
someArray.push( newPerson );
//deleting from the array
var index = someMap[ 'Kristian' ];
someArray.splice( index, 1 );
Sepertinya ada kesalahan dalam array sintaks jadi asumsi anda berarti array sebagai lawan untuk sebuah objek, Array.sambatan adalah teman anda di sini:
someArray = [{name:"Kristian", lines:"2,5,10"}, {name:"John", lines:"1,19,26,96"}];
someArray.splice(1,1)
Anda dapat menggunakan peta fungsi juga.
someArray = [{name:"Kristian", lines:"2,5,10"},{name:"John",lines:"1,19,26,96"}];
newArray=[];
someArray.map(function(obj, index){
if(obj.name !== "Kristian"){
newArray.push(obj);
}
});
someArray = newArray;
console.log(someArray);
Jika anda ingin menghapus semua kejadian dari objek yang diberikan (didasarkan pada beberapa kondisi) kemudian menggunakan javascript sambatan metode di dalam for loop.
Sejak mengeluarkan sebuah benda akan mempengaruhi para suhu udara, pastikan untuk pengurangan counter satu langkah, sehingga suhu udara check tetap utuh.
var objArr=[{Name:"Alex", Age:62},
{Name:"Robert", Age:18},
{Name:"Prince", Age:28},
{Name:"Cesar", Age:38},
{Name:"Sam", Age:42},
{Name:"David", Age:52}
];
for(var i = 0;i < objArr.length; i ++)
{
if(objArr[i].Age > 20)
{
objArr.splice(i, 1);
i--; //re-adjust the counter.
}
}
Snippet kode di atas akan menghapus semua objek dengan usia lebih besar dari 20.