Misalkan saya memiliki kode ini:
var myArray = new Object();
myArray["firstname"] = "Bob";
myArray["lastname"] = "Smith";
myArray["age"] = 25;
Sekarang jika saya ingin menghapus "lastname"?....ada beberapa setara
myArray["lastname"].hapus()
?
(Aku butuh elemen pergi karena jumlah elemen yang penting dan saya ingin menjaga hal-hal yang bersih.)
Gunakan "hapus" kata kunci di dalam Javascript.
delete myArray["lastname"];
EDIT:
Dalam beberapa mesin JavaScript, hapus kata kunci mungkin menyakiti kinerja seperti itu akan membatalkan mengkompilasi / JIT optimasi.
http://www.html5rocks.com/en/tutorials/speed/v8/ http://www.smashingmagazine.com/2012/11/writing-fast-memory-efficient-javascript/
Semua objek dalam JavaScript diimplementasikan sebagai hashtables/array asosiatif. Jadi, berikut adalah ekuivalen:
alert(myObj["SomeProperty"]);
alert(myObj.SomeProperty);
Dan, seperti yang sudah ditunjukkan, anda "hapus" properti dari sebuah objek melalui hapus
kata kunci, yang dapat anda gunakan dalam dua cara:
delete myObj["SomeProperty"];
delete myObj.SomeProperty;
Berharap tambahan info ini membantu...
Tidak ada jawaban sebelumnya mengatasi kenyataan bahwa Javascript tidak memiliki array asosiatif untuk mulai dengan - tidak ada jenis array
seperti itu, lihat jenis
.
Apa Javascript, adalah contoh-contoh objek dengan sifat dinamis. Ketika sifat yang bingung dengan elemen-elemen dari sebuah Array object instance maka hal-Hal Buruk™ terikat untuk terjadi:
var elements = new Array()
elements.push(document.getElementsByTagName("head")[0])
elements.push(document.getElementsByTagName("title")[0])
elements["prop"] = document.getElementsByTagName("body")[0]
console.log("number of elements: ", elements.length) // returns 2
delete elements[1]
console.log("number of elements: ", elements.length) // returns 2 (?!)
for (var i = 0; i < elements.length; i++)
{
// uh-oh... throws a TypeError when i == 1
elements[i].onmouseover = function () { window.alert("Over It.")}
console.log("success at index: ", i)
}
Untuk memiliki universal penghapusan fungsi yang tidak meledak pada anda, gunakan:
Object.prototype.removeItem = function (key) {
if (!this.hasOwnProperty(key))
return
if (isNaN(parseInt(key)) || !(this instanceof Array))
delete this[key]
else
this.splice(key, 1)
};
//
// Code sample.
//
var elements = new Array()
elements.push(document.getElementsByTagName("head")[0])
elements.push(document.getElementsByTagName("title")[0])
elements["prop"] = document.getElementsByTagName("body")[0]
console.log(elements.length) // returns 2
elements.removeItem("prop")
elements.removeItem(0)
console.log(elements.hasOwnProperty("prop")) // returns false as it should
console.log(elements.length) // returns 1 as it should
Sedangkan jawaban yang diterima adalah benar, tidak ada penjelasan mengapa ia bekerja.
Pertama-tama, kode anda harus mencerminkan fakta bahwa ini adalah TIDAK array:
var myObject = new Object();
myObject["firstname"] = "Bob";
myObject["lastname"] = "Smith";
myObject["age"] = 25;
Perhatikan bahwa semua benda-benda (termasuk `Array) dapat digunakan dengan cara ini. Namun, jangan berharap untuk standar JS fungsi array (pop, mendorong,...) untuk bekerja pada benda!
Seperti dikatakan dalam jawaban yang diterima, maka anda dapat menggunakan hapus
untuk menghapus entri dari benda-benda:
delete myObject["lastname"]
Anda harus memutuskan rute mana yang ingin anda ambil, baik menggunakan benda-benda (array asosiatif / kamus) atau gunakan array (peta). Jangan pernah mencampur dua dari mereka.
Menggunakan metode sambatan
untuk benar-benar menghapus item dari suatu objek array:
Object.prototype.removeItem = function (key, value) {
if (value == undefined)
return;
for (var i in this) {
if (this[i][key] == value) {
this.splice(i, 1);
}
}
};
var collection = [
{ id: "5f299a5d-7793-47be-a827-bca227dbef95", title: "one" },
{ id: "87353080-8f49-46b9-9281-162a41ddb8df", title: "two" },
{ id: "a1af832c-9028-4690-9793-d623ecc75a95", title: "three" }
];
collection.removeItem("id", "87353080-8f49-46b9-9281-162a41ddb8df");
Sebagai jawaban lain telah mencatat, apa yang anda gunakan tidak Javascript array, tapi objek Javascript, yang bekerja hampir seperti array asosiatif dalam bahasa lain kecuali bahwa semua tombol yang dikonversi ke string. Baru Peta toko kunci sebagai jenis asli.
Jika anda memiliki sebuah array dan bukan objek, anda bisa menggunakan array's .filter fungsi, untuk mengembalikan array baru tanpa item yang anda ingin dihapus:
var myArray = ['Bob', 'Smith', 25];
myArray = myArray.filter(function(item) {
return item !== 'Smith';
});
Jika anda memiliki browser yang lebih tua dan jQuery, jQuery memiliki $.grep
metode yang bekerja sama:
myArray = $.grep(myArray, function(item) {
return item !== 'Smith';
});
Anda menggunakan Objek, anda tidak memiliki array asosiatif untuk mulai dengan. Dengan array asosiatif, menambah dan menghapus item yang berjalan seperti ini:
Array.prototype.contains = function(obj)
{
var i = this.length;
while (i--)
{
if (this[i] === obj)
{
return true;
}
}
return false;
}
Array.prototype.add = function(key, value)
{
if(this.contains(key))
this[key] = value;
else
{
this.push(key);
this[key] = value;
}
}
Array.prototype.remove = function(key)
{
for(var i = 0; i < this.length; ++i)
{
if(this[i] == key)
{
this.splice(i, 1);
return;
}
}
}
// Read a page's GET URL variables and return them as an associative array.
function getUrlVars()
{
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
}
function ForwardAndHideVariables() {
var dictParameters = getUrlVars();
dictParameters.add("mno", "pqr");
dictParameters.add("mno", "stfu");
dictParameters.remove("mno");
for(var i = 0; i < dictParameters.length; i++)
{
var key = dictParameters[i];
var value = dictParameters[key];
alert(key + "=" + value);
}
// And now forward with HTTP-POST
aa_post_to_url("Default.aspx", dictParameters);
}
function aa_post_to_url(path, params, method) {
method = method || "post";
var form = document.createElement("form");
//move the submit function to another variable
//so that it doesn't get written over if a parameter name is 'submit'
form._submit_function_ = form.submit;
form.setAttribute("method", method);
form.setAttribute("action", path);
for(var i = 0; i < params.length; i++)
{
var key = params[i];
var hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", key);
hiddenField.setAttribute("value", params[key]);
form.appendChild(hiddenField);
}
document.body.appendChild(form);
form._submit_function_(); //call the renamed function
}
Ada cara yang elegan di Airbnb Panduan Gaya untuk melakukan hal ini (ES7):
const myObject = {
a: 1,
b: 2,
c: 3
};
const { a, ...noA } = myObject;
console.log(noA); // => { b: 2, c: 3 }
Hak cipta: https://codeburst.io/use-es2015-object-rest-operator-to-omit-properties-38a3ecffe90
Kita dapat menggunakannya sebagai fungsi juga. Sudut melempar beberapa kesalahan jika digunakan sebagai prototipe. Terima Kasih @HarpyWar. Itu membantu saya memecahkan masalah.
var removeItem = function (object, key, value) {
if (value == undefined)
return;
for (var i in object) {
if (object[i][key] == value) {
object.splice(i, 1);
}
}
};
var collection = [
{ id: "5f299a5d-7793-47be-a827-bca227dbef95", title: "one" },
{ id: "87353080-8f49-46b9-9281-162a41ddb8df", title: "two" },
{ id: "a1af832c-9028-4690-9793-d623ecc75a95", title: "three" }
];
removeItem(collection, "id", "87353080-8f49-46b9-9281-162a41ddb8df");
Jika untuk alasan apapun tombol hapus tidak bekerja (seperti itu bukankah bekerja untuk me )
Anda dapat sambatan itu dan kemudian menyaring nilai-nilai terdefinisi
// to cut out one element via arr.splice(indexToRemove, numberToRemove);
array.splice(key, 1)
array.filter(function(n){return n});
Jangan mencoba dan rantai mereka sejak sambatan kembali dihapus unsur-unsur;
Dengan menggunakan "hapus"
kata kunci, itu akan menghapus elemen array dari array di javascript.
Misalnya,
Perhatikan pernyataan-pernyataan berikut ini.
var arrayElementToDelete = new Object();
arrayElementToDelete["id"] = "XERTYB00G1";
arrayElementToDelete["first_name"] = "Employee_one";
arrayElementToDelete["status"] = "Active";
delete arrayElementToDelete["status"];
Baris terakhir dari kode akan menghapus elemen array yang's kunci "status" dari array.
var myArray = newmyArray = new Object();
myArray["firstname"] = "Bob";
myArray["lastname"] = "Smith";
myArray["age"] = 25;
var s = JSON.stringify(myArray);
s.replace(/"lastname[^,}]+,/g,'');
newmyArray = JSON.parse(p);
Tanpa perulangan/iterates kita mendapatkan hasil yang sama
Untuk "Array":
Jika anda mengetahui indeks:
array.splice(index, 1);
Jika anda tahu nilai:
function removeItem(array, value) {
var index = array.indexOf(value);
if (index > -1) {
array.splice(index, 1);
}
return array;
}
Yang paling upvoted jawaban untuk menghapus
bekerja dengan baik dalam kasus benda tetapi tidak untuk real array. Jika saya menggunakan hapus
menghilangkan unsur-unsur dari loop namun tetap unsur sebagai kosong
dan panjang dari array tidak berubah. Ini mungkin menjadi masalah dalam beberapa skenario.
Misalnya, jika saya melakukan myArray.toString() pada myArray setelah penghapusan melalui hapus
menciptakan entri kosong yaitu ,,
function removeItem (array, value) {
var i = 0;
while (i < array.length) {
if(array[i] === value) {
array.splice(i, 1);
} else {
++i;
}
}
return array;
}
penggunaan:
var new = removeItem( ["apple","banana", "orange"], "apple");
// ---> ["banana", "orange"]