Aşağıdaki gibi bir nesne yarattığımı söyleyin:
Mülkiyetten regex vazgeçmenin en iyi yolu myObject , aşağıdaki gibi yeni sonuç çıkması mı?
Daha bu konuda okuma ilgilenen herkes için, yığın taşması kullanıcı kangax hakkında inanılmaz derinlemesine blog yazısı yazmış delete , kendi blogunda açıklamada silme anlama . Şiddetle tavsiye edilir.
Operatör delete beklenmedik şekilde yavaş!
Kriterlere bak .
Sil, nesnenin özelliklerini artık bırakmadan kaldırmanın tek gerçek yoludur, ancak “alternatif” ayarına kıyasla ~ 100 kat daha yavaş çalışır object[key] = undefined .
Bu alternatif, bu sorunun doğru cevabı değil! Ancak, dikkatli kullanırsanız, bazı algoritmaları önemli ölçüde hızlandırabilirsiniz. delete Döngülerde kullanıyorsanız ve performansla ilgili sorunlarınız varsa ayrıntılı açıklamayı okuyun.
Kişi delete ne zaman kullanmalı ve ne zaman değeri olarak ayarlanmalıdır undefined ?
Bir nesne, bir anahtar-değer çiftleri kümesi olarak görülebilir. 'Değer' dediğim şey, o 'tuşa' bağlı olan ilkel veya başka bir nesneye referanstır.
Kullanım delete , sen kontrol yok hangi koduna sonuç nesnesini geçiyoruz zaman (ya da ekip veya kendiniz hakkında emin değilken).
Bu HashMap anahtarı siler .
undefined Performansı önemserken , ayarını kullanın . Kodunuzu ciddi bir şekilde artırabilir.
HashMap yerine anahtar kalıntılar , sadece değer ile değiştirilir undefined . Anlayın, bu for..in döngü hala bu anahtar üzerinde yinelenecek.
Bu yöntemi kullanarak, mülkün varlığını belirlemenin tüm yolları beklendiği gibi çalışmayacaktır.
Ancak bu kod:
Her iki yöntem için de aynı şekilde davranacaktır.
Özetlemek gerekirse, farklılıkların tümü mülk varlığını belirleme yolları ve for..in döngü hakkındadır.
Bellek Kaçaklarına Dikkat!
Kullanım obj[prop] = undefined yapmaktan daha hızlı olsa da delete obj[prop] , bir diğer önemli husus obj[prop] = undefined her zaman uygun olmayabilir. delete obj[prop] kaldırır prop gelen obj ve oysa bellekten onu siler obj[prop] = undefined basitçe değerini ayarlar prop için undefined hangi yapraklar prop hala bellekte. Bu nedenle, birçok anahtarın oluşturulduğu ve silindiği durumlarda, kullanımı obj[prop] = undefined pahalı bellek uzlaşmasını zorlayabilir (sayfanın donmasına neden olabilir) ve potansiyel olarak yetersiz bellek hatası olabilir. Aşağıdaki kodu inceleyin.
Yukarıdaki kodda, basitçe yapmak nodeRecords[i][lastTime] = undefined; , her animasyon karesi nedeniyle büyük bir hafıza sızıntısına neden olacaktır. Her bir çerçeve, tüm 65536 DOM elemanları bir başka 65536 ayrı yuva alacaktır, ancak önceki 65536 yuvaları sadece tanımsız olarak ayarlanacak ve bu da onları bellekte asılı bırakacaktır. Devam edin, yukarıdaki kodu konsolda çalıştırmayı deneyin ve kendiniz görün. Bellek yetersiz bir hatayı zorladıktan sonra, delete operatörü kullanan kodun aşağıdaki sürümü dışında tekrar çalıştırmayı deneyin.
Yukarıdaki kod parçasında görüldüğü gibi, delete operatör için bazı nadir uygun kullanım durumları vardır . Ancak, bu sorun hakkında çok fazla endişelenmeyin. Bu sadece onlara sürekli yeni anahtarlar ekleyen uzun ömürlü nesnelerde sorun yaratacaktır. Başka bir durumda (gerçek dünya programlamasında hemen hemen her durumda olan), kullanımı en uygun olanıdır obj[prop] = undefined . Bu bölümün asıl amacı, bu konuyu dikkatinize sadece getirmektir, böylece nadiren bu durumun kodunuzda bir sorun haline gelmesi ihtimalini ortadan kaldırabilir, o zaman sorunu daha kolay anlayabilirsiniz ve böylece kodunuzu bulmak için kodları ayırarak saat harcamak zorunda kalmazsınız. ve bu sorunu anlayın.
Her Zaman Ayarlama undefined
Bununla birlikte, polimorfik dizilerde düzeltilemeyen iki ana problem vardır:
Yavaş ve hafızasızlar. Belirli bir dizine erişirken, dizinin genel türünü almak yerine, tarayıcının türü her bir dizinin kendi türündeki ek meta verilerini depoladığı dizin başına esasına göre alması gerekir.
Bir kez polimorfik, her zaman polimorfik. Bir dizi polimorfik yapıldığında, polimorfizm Webkit tarayıcılarında geri alınamaz. Dolayısıyla, bir polimorfik diziyi polimorfik olmayan bir hale getirseniz bile, tarayıcı tarafından polimorfik bir dizi olarak saklanacaktır.
Polimorfizmi uyuşturucu bağımlılığına benzetebiliriz. İlk bakışta, çok kazançlı görünüyor: güzel oldukça kabarık kod. Daha sonra, kodlayıcı dizilerini polimorfizm ilacına sokar. Anında, polimorfik dizi daha az verimli hale gelir ve uyuşturulduğundan beri eskisi kadar verimli olamaz. Böyle bir durumu gerçek hayatla ilişkilendirmek için, kokain kullanan biri basit bir kapı kolunu bile kullanamayabilir, PI'nin rakamlarını daha az hesaplayabilir. Aynı şekilde, polimorfizm ilacı üzerindeki bir dizi, bir monomorfik dizi kadar verimli olamaz.
Ancak, bir ilaç gezisi analojisinin delete operasyonla ilgisi nedir? Cevap, yukarıdaki kod parçacığındaki son kod satırını devralır. Böylece, bu kez bir bükülme ile yeniden incelenmesine izin verin.
Gözlemek. bar = "" Oysa polimorfizmi bar = undefined zorlamaz. Bu nedenle, kişi daima mümkün olduğunda polimorfizme neden olmayacak şekilde kendi nesnelerinde karşılık gelen türü kullanmalıdır. Bu kişilerden biri aşağıdaki listeyi genel bir referans olarak kullanabilir ve bunları devam ettirebilir. Ancak, lütfen aşağıdaki fikirleri açıkça kullanmayın. Bunun yerine, kodunuz için en iyi olanı kullanın.
Boole ilkeline yazılan bir dizi / değişken kullanırken , boş değeri kullanın ya false da kullanın undefined . Gereksiz polimorfizmden kaçınmak iyidir, ancak tüm kodunuzu açıkça yasaklamak için yeniden yazmak muhtemelen performansta bir düşüşe yol açacaktır. Yaygın yargı kullanın!
İlkel sayıya yazılan bir dizi / değişken kullanırken 0 , boş değer olarak kullanın . Hızlı tamsayılar (2147483647 dahil -2147483648 kadar) ve yavaş kayan nokta çiftler (dahil olduğu başka bir şey: içten, sayıların iki tür Not olduğunu NaN ve Infinity ). Bir tamsayı ikiye ayrıldığında, bir tamsayıya geri yükseltilemez.
İlkel dizgesine yazılan bir dizi / değişken kullanırken "" , boş değer olarak kullanın .
Bir Sembol kullanırken bekleyin, neden bir Sembol kullanıyorsunuz?!?! Semboller performans için kötü juju'lardır. Sembolleri kullanmak için programlanan her şey, Sembolleri kullanmadan daha hızlı bir kod elde etmek için Sembolleri kullanmamak üzere yeniden programlanabilir. Semboller gerçekten sadece süper verimsiz meta-şeker.
Başka bir şey kullanırken, kullanın null .
Ancak, dikkatli olun! Bunu, önceden varolan tüm kodunuzla aniden başlatmaya çalışmayın, çünkü bu önceden varolan kodu bozabilir ve / veya garip hatalar ortaya çıkarabilir. Aksine, böyle verimli bir uygulamanın baştan itibaren uygulanması gerekir ve önceden var olan kodu dönüştürürken, eski kodu bu yeni uygulamaya yükseltmeye çalışırken olduğu gibi ilgili tüm satırları ikiye, üçe, dörtlü olarak kontrol etmeniz önerilir. ödüllendirici olduğu gibi riskli.
Bu Firefox ve Internet Explorer’da çalışıyor ve bence diğerlerinde de çalışıyor.
2018-07-21 Güncellemesi: Uzun zamandır bu cevaptan utanmıştım, bu yüzden biraz dokunmamın zamanı geldiğini düşünüyorum. Bu cevabın gereksiz yere uzun ve kıvrımlı kısımlarının okunmasını hızlandırmaya yardımcı olmak için sadece biraz yorum, açıklama ve biçimlendirme.
Sorunun asıl cevabı
Diğerlerinin dediği gibi kullanabilirsiniz delete .
Diziden delete gelme. Yerine Array.prototype.splice kullanın.
Dizilerde, düz eski nesnelerden farklı olarak, delete çöp biçiminde çöp yaprakları kullanarak null , dizide bir "delik" oluşturur.
Gördüğünüz gibi, delete her zaman beklediğiniz gibi çalışmaz. Değerin üzerine yazılır, ancak bellek yeniden tahsis edilmez. Yani, yer array değiştirmedi array . Bunun aksine Array.prototype.unshift , dizinin başında bir öğe ekler ve her şeyi yukarı kaydırır ( array olur array , vb.)
Doğrusu, bir kenara ayarını dan null ziyade undefined meşru garip --which - Bu davranış olmamalı , çünkü şaşırtıcı delete bir işlem işleci gibidir typeof haşlanmış dile olup dikkat etmem gerekiyordu değildir, tip arasında üzerinde kullanıldığı nesne, özellikle dizilerle çalışmak için tasarlanmış yöntemlerin Array bir alt sınıfıdır . Bu yüzden , diziyi yeniden değiştirmek için özel bir kasanın pişirilmesinin iyi bir nedeni yoktur , çünkü bu gereksiz işleri yavaşlatır. Geçmişe bakıldığında, beklentilerim gerçekçi değildi. Object delete
Tabii ki, bu vermedi bana sürpriz. Çünkü bunu "boş çöp" a karşı haçlı seferimi haklı çıkarmak için yazdım:
Tehlikeleri ve doğal olan null ve boşa harcanan sorunları görmezden gelmek, dizinin kesin olması gerekirse bu sorunlu olabilir.
Bu, null s'den kurtulmanın korkunç bir gerekçesidir - null ancak yanlış kullanılması halinde tehlikelidir ve "hassasiyet" ile ilgisi yoktur. delete Bir diziden çıkmamanın asıl nedeni , etrafta çöp dolu ve dağınık veri yapılarını bırakmanın özensiz ve böcek eğilimli olmasıdır.
Ardından uzun soluklaşan bir senaryo var, bu nedenle isterseniz Çözüm bölümüne geçebilirsiniz . Bu bölümden ayrılmamın tek nedeni, bazı insanların muhtemelen komik olduğunu düşündüğümü ve "komik" bir cevap gönderen ve daha sonra tüm "komik" olanları silen "o adam" olmak istemiyorum. .
... aptalca biliyorum.
Kararlı ve uzun soluklu PDP-11 senaryosu
Örneğin, 'sekmeler' için kullanılan bir diziyi bir dizede saklamak için JSON serileştirmesini kullanan bir webapp oluşturduğunuzu varsayalım (bu durumda, localStorage ). Diyelim ki kod, dizinin üyelerinin sayısal dizinlerini, ekrana çizerken bunları "başlıklandırmak" için kullanıyor. Bunu neden sadece "ünvanı" saklamak yerine yapıyorsun? Çünkü ... sebepler .
Giderek aptal kenar senaryosu, bir kenara, delete söz konusu diziyi kullanmak , diziyi null kirletmek ve daha sonra uygulamada hatalara neden olmakla sonuçlanacaktır . Ve null denetlerseniz, sekmelere benzer şekilde sonuçlanan sayıları doğrudan atlarsınız     ... .
Evet, kesinlikle istediğin bu değildi.
Şimdi, ikinci bir yineleyiciyi, örneğin yalnızca geçerli değerler diziden okunduğunda artmaya devam edecek şekilde tutabilirsiniz j . Fakat bu null sorunu tam olarak çözmez ve yine de bu trol PDP-11 kullanıcısını memnun etmek zorunda kalırsınız . Ne yazık ki, onun bilgisayar sadece gelmez geçen tamsayı olduğu beklemeye için yeterli belleğe sahip (... o bir değişken genişlikli dizi işlemek için yönetir nasıl sormayın) .
Bu yüzden size öfkeyle bir e-posta gönderir:
Şu an için, kararın bitiyor. Bu adam uygulamanız hakkında hiç durmadan şikayet ediyor ve siz de ona susmasını ve daha iyi bir bilgisayar bulmasını söylemelisiniz.
Neyse ki, diziler do indeksleri silme ve Bellek yeniden bir uzman yöntemi vardır: Array.prototype.splice() . Böyle bir şey yazabilirsiniz:
Ve aynen böyle, Bay PDP-11’i memnun ettiniz. Yaşasın! (Yine de ona hala söylerdim ...)
Her ikisi de çok faydalı olduğu için, benzer adlandırılmış iki işlev arasındaki farkı göstermenin önemli olduğunu düşünüyorum.
Dizi.prototype.splice (başlangıç, n)
.splice() diziyi değiştirir ve kaldırılan dizinleri döndürür. Dizi dizinden başlayarak dilimlenir start , ve n öğeler kesilir. N belirtilmemişse, sonraki dizinin tamamı start dilimlenir ( n = array.length - start ).
Array.prototype.slice (başlangıç, bitiş)
.slice() tahribatsızdır ve belirtilen dizinleri start ila arasında olan yeni bir dizi döndürür end . Eğer end is belirtilmemiş sol davranış aynıdır .splice() ( end = array.length ). Davranış, bir nedenden ötürü, end 0 yerine 1'den dizin oluşturduğundan biraz zor. Neden böyle yaptığını bilmiyorum, ama işte böyle. Ayrıca, end <= start sonuç boş bir dizidir.
Aslında olan bu değil, ancak bu şekilde düşünmek daha kolay. MDN'ye göre, gerçekte olan şey şu:
İle belirtilen dizin end basitçe dilimden hariç tutulur. Parantez içindeki indeksler neyin dilimleneceğini gösterir. Her iki durumda da, davranışlar sezgisel değildir ve tek tek hataların adil payına neden olma zorunluluğudur; bu nedenle, davranışını daha yakından taklit etmek için bir sarmalayıcı işlevi yapmayı yararlı bulabilirsiniz .splice() :
Sarıcı işlevinin türler hakkında çok katı olacak şekilde tasarlandığını ve bir null şey kapalıysa geri döneceğini unutmayın . Bu gibi bir dize koyarak içerir "3" . Çeşitleri hakkında gayretli olmak programcıya bırakılmıştır. Bu, iyi programlama pratiğini teşvik etmektir.
İle ilgili güncelleme is_array()
Bu, (şimdi kaldırılmış) snippet'iyle ilgilidir:
Braden Best2012-09-182012-09-18 00:56:53Z
Eski soru, modern cevap. Bir ECMAScript 6 özelliği olan nesne imha özelliğini kullanarak, şu kadar basit:
Veya soru örneği ile:
Bunu Babil deneme editöründe çalışırken görebilirsiniz.
Aynı değişkene atamak için a kullanın let :
Bir diğer alternatif Underscore.js kütüphanesini kullanmaktır .
Not _.pick() ve _.omit() doğrudan orijinal nesneyi değişiklik yapmayın de dönüp nesnenin bir kopyasını ve. Sonucu orijinal nesneye atamak hile yapmalı (gösterilmemiştir).
Referans: link _.pick (nesne, * tuşları)
Yalnızca beyaz listedeki tuşlar (veya geçerli tuş dizisi) için değerlere sahip olmak üzere filtrelenen nesnenin bir kopyasını döndürün.
Referans: link _.omit (nesne, * tuşları)
Kara listedeki tuşları (veya tuş dizisini) atlamak için filtrelenen nesnenin bir kopyasını döndürün.
Diziler için, _.filter() ve _.reject() benzer bir şekilde kullanılabilir.
Thaddeus Albers2014-05-242014-05-24 18:53:26Z
Yayılı Sözdizimi (ES6)
İhtiyacı olanlara ...
Bu konudaki @Koen cevabını tamamlamak için, yayılma sözdizimini kullanarak dinamik bir değişkeni kaldırmak istediğinizde, şöyle yapabilirsiniz:
* foo değeri a (1 olan) yeni bir değişken olacaktır .
Bir özelliği bir nesneden kaldırmanın birkaç yaygın yolu vardır.
Her birinin kendine göre avantajları ve dezavantajları vardır ( bu performans karşılaştırmasını kontrol edin ):
Okunabilir ve kısa, ancak performansı optimize edilmediğinden çok sayıda nesne üzerinde çalışıyorsanız en iyi seçenek olmayabilir.
daha hızlı 2X daha fazla delete ancak mülkiyet edilirdeğilsilinir ve iterated.
Bu ES6 operatör, herhangi bir özellik hariç, mevcut nesneyi mutasyona uğratmadan yepyeni bir nesne döndürmemize izin verir. Olumsuz tarafı, yukarıdan daha kötü bir performansa sahip olması ve aynı anda birçok özelliği kaldırmanız gerektiğinde kullanılması önerilmemesidir.
Lior Elrom2018-09-122018-09-12 18:39:55Z
sonuç şöyle olurdu:
Bu belirli anahtarı, nesne anahtarlarınızdan aşağıdaki gibi silebilirsiniz:
Sonra nesneleri anahtar kullanarak kullanmak Object.keys(myJSONObject) olacaktır:
Ancak mesele, hafızayı önemsiyorsanız ve nesnenin hafızadan kaldırılmasını tamamen istiyorsanız, tuşu silmeden önce boş bırakmanız önerilir:
Buradaki diğer önemli nokta aynı nesneye yaptığınız diğer referanslara dikkat etmektir. Örneğin, şöyle bir değişken oluşturursanız:
Veya bunu, başka bir nesneye yeni bir işaretçi olarak ekleyin:
Daha sonra nesnesinden çıkarsanız bile myJSONObject , söz konusu nesne bellekten silinmez, çünkü regex değişken ve myOtherObject["regex"] değerleri hala vardır. O zaman nesneyi bellekten nasıl kaldırabiliriz?
Bunun cevabı , kodunuzdaki tüm referansları silmek, o nesneye işaret etmek ve aynı zamanda o nesneye yeni referanslar oluşturmak için var ifadeler kullanmamak olacaktır . var İfadelere ilişkin bu son nokta , genellikle karşılaştığımız en önemli konulardan biridir, çünkü var ifadelerin kullanılması yaratılan nesnenin kaldırılmasını önleyecektir.
Bu, bu durumda, nesneyi kaldıramayacağınız anlamına gelir; çünkü regex değişkeni bir var ifade aracılığıyla oluşturdunuz ve eğer yaparsanız:
Sonuç false , silme ifadenizin beklediğiniz gibi yürütülmediği anlamına gelir. Ancak, bu değişkeni daha önce yaratmamış olsaydınız ve sadece myOtherObject["regex"] mevcut son referansınız gibi yapmış olsaydınız, bunu sadece şu şekilde kaldırarak yapabilirdiniz:
Güncelleme: @AgentME sayesinde:
Bir özelliği silmeden önce null değerine ayarlamak hiçbir şey yapmaz (nesne Object.seal tarafından mühürlenmemişse ve silme başarısız olursa. Bu, özellikle denemeden genellikle böyle olmaz).
Daha fazla bilgi almak için Object.seal : Object.seal ()
Mehran Hatami2014-02-122014-02-12 06:29:57Z
ECMAScript 2015 (veya ES6) yerleşik Reflect nesnesiyle geldi . Object özelliğini , hedef nesne ve özellik anahtarı olan Reflect.deleteProperty () işlevini parametre olarak çağırarak silmek mümkündür :
Ancak, nesnenin özelliği yapılandırılamazsa, ne deleteProperty işleviyle, ne de silme operatörüyle silinemez:
Object.freeze () , nesnenin tüm özelliklerini yapılandırılamaz (diğer şeylerin yanı sıra ) yapar. deleteProperty işlev ( silme operatörünün yanı sıra ), false özelliklerinden herhangi birini silmeye çalıştığında döner . Eğer özellik yapılandırılabilir true ise, özellik bulunmasa bile döndürür .
Katı mod kullanılırken delete ve arasındaki fark deleteProperty :
Buna benzeyen bir nesneniz olduğunu varsayalım:
Bir nesne özelliğini silme
Tüm staff diziyi kullanmak istiyorsanız , bunu yapmanın doğru yolu, şunu yapmak olacaktır:
Alternatif olarak, bunu da yapabilirsiniz:
Benzer şekilde, tüm öğrenci sırasını kaldırmak delete Hogwarts.students; veya çağırmakla yapılabilir delete Hogwarts['students']; .
Dizi dizini silme
Şimdi, tek bir personel veya öğrenciyi kaldırmak istiyorsanız, prosedür biraz farklıdır, çünkü her iki özellik de dizilerdir.
Personel üyelerinizin indeksini biliyorsanız, bunu basitçe yapabilirsiniz:
Dizini bilmiyorsanız, dizin araması yapmanız da gerekir:
Teknik delete olarak bir dizi için kullanabilirsiniz , ancak bunu kullanmak, örneğin Hogwarts.staff.length daha sonra çağırırken yanlış sonuçlara neden olur . Başka bir deyişle, delete öğeyi kaldırır, ancak length mülkün değerini güncellemez . Kullanımı delete , indekslemenizi de bozar.
Bu nedenle, bir nesnedeki değerleri silerken, her zaman önce nesne özellikleriyle ilgilenip ilgilenmediğinizi veya dizi değerleriyle ilgilenip ilgilenmediğinizi düşünün ve buna göre uygun stratejiyi seçin.
Bunu denemek istiyorsanız, bu Fiddle'ı başlangıç ​​noktası olarak kullanabilirsiniz .
John Slegers2016-02-212016-02-21 18:09:47Z
(Yıkma + Yayılma operatörü)
Delete operatörü bunu yapmak için en iyi yoldur.
Gösterilecek canlı bir örnek:
Tarun Nagpal2015-04-282015-04-28 05:14:08Z
Şahsen nesne ve dizi manipülasyonu için Underscore.js veya Lodash kullanıyorum :
Kullanılması silme yöntemi MDN açıklaması uyarınca, delete operatörü bir nesnenin özelliği kaldırır, bunu yapmak için en iyi yoldur. Böylece sadece yazabilirsiniz:
Silme işleci, belirli bir özelliği bir nesneden kaldırır. Başarılı bir silme işleminde, doğru döndürülür, aksi takdirde yanlış döndürülür. Ancak, aşağıdaki senaryoları dikkate almak önemlidir:
Silmeye çalıştığınız özellik mevcut değilse, silme herhangi bir etkiye sahip olmayacak ve doğru
Nesnenin prototip zincirinde aynı ada sahip bir özellik varsa, silme işleminden sonra nesne, prototip zincirindeki özelliği kullanır (başka bir deyişle, silme yalnızca kendi özellikleri üzerinde etkilidir).
Var olarak bildirilen hiçbir özellik genel kapsamdan veya bir fonksiyonun kapsamından silinemez.
Bu nedenle, silme global kapsamdaki hiçbir işlevi silemez (bunun bir işlev tanımından veya bir işlevden (ifade) bir parçası olup olmadığı).
Bir nesnenin parçası olan işlevler (
genel kapsam dışında ) silme ile silinebilir.
İzin veya const ile ilan edilen hiçbir mülk tanımlandığı kapsamdan silinemez. Yapılandırılamayan özellikler kaldırılamaz. Bu, Math, Array, Object gibi yerleşik nesnelerin özelliklerini ve Object.defineProperty () gibi yöntemlerle yapılandırılamaz olarak oluşturulan özellikleri içerir.
Aşağıdaki kod parçası başka basit bir örnek verir:
Daha fazla bilgi edinmek ve daha fazla örnek görmek için aşağıdaki bağlantıyı ziyaret edin:
Başka bir çözüm kullanarak Array#reduce .
Ancak, olacak mutasyona orijinal nesneyi. Belirtilen anahtar olmadan yeni bir nesne oluşturmak istiyorsanız , azaltma işlevini yeni bir değişkene atamanız yeterlidir, örneğin:
kind user2017-03-262017-03-26 15:19:55Z
Özelliği olmayan nesneyi klonlamak için:
Ve 'a' silmemiz gerekiyor.
1. açık prop anahtar ile:
2. Değişken prop tuşu ile:
3. Cool ok işlevi ?:
4. Birden fazla özellik için
Bu yazı çok eski ve onu çok yararlı buluyorum, bu yüzden başkasının bu yazıyı görmesi ve neden PHP unset işlevinde bu kadar basit olmadığını düşünmeme rağmen yazdığım unset işlevini paylaşmaya karar verdim.
Bu yeni unset işlevi yazmanın nedeni , bu hash_map içindeki diğer tüm değişkenlerin dizinini tutmaktır. Aşağıdaki örneğe bakın ve bir değeri "hash_map" den çıkardıktan sonra "test2" dizininin nasıl değişmediğini görün.
Üzgünüz, bu durum sizin özel kullanım durumunuza eklenmediyse de, bunun nesneleri ve özelliklerini yönetirken adapte olmak için iyi bir tasarım olduğuna inanıyorum.
Ramda # dissoc kullanarak özniteliği olmayan yeni bir nesne elde edersiniz regex :
Aynı efekti elde etmek için diğer işlevleri de kullanabilirsiniz - ihmal, seçim, ...
Aşağıdaki yöntemi deneyin. Object Özellik değerini atayın undefined . Sonra stringify nesne ve parse .
Mohammed Safeer2016-07-062016-07-06 14:51:03Z
Nesnenin derinliklerine yerleştirilmiş bir özelliği silmek istiyorsanız, aşağıdaki özyinelemeyi özelliğin yolu ile ikinci argüman olarak kullanabilirsiniz:
delete Anahtar kelimeyi kullanarak bir nesnenin herhangi bir özelliğini kolayca silebilirsiniz .
Herhangi bir mülkü kaldırmak için, şöyle bir anahtar kelimeyi key1 kullanın delete :
Veya dizi benzeri gösterimi de kullanabilirsiniz:
Referans: MDN .
Kalpesh Patel2016-04-072016-04-07 05:46:39Z
Dan'in “silme” nin çok yavaş olduğu iddiası ve gönderdiği kriter şüphe edildi. Bu yüzden kendimi Chrome 59'da test ettim. Görünen o ki 'delete' yaklaşık 30 kat daha yavaş görünüyor:
Diğer işlemlerin neden olduğu etkiyi en aza indirmek için bilerek bir döngü döngüsünde birden fazla “silme” işlemi gerçekleştirdiğimi unutmayın.
Chong Lip Phang2017-07-262017-07-26 07:19:30Z
"regex" Özellik olmadan yeni bir nesne oluşturmayı düşünün çünkü orijinal nesneye her zaman programınızın diğer bölümleri tarafından başvuruda bulunabilir. Böylece manipüle etmekten kaçınmalısınız.
ES6 yok etmeyi rest operatörü ile kullanabilirsiniz.
Özellikler , geri kalan operatörle birlikte yıkım kullanılarak çıkarılabilir . Örneğinizde regex yok edilir (yok sayılır) ve özelliklerin geri kalanı dinlenme olarak döndürülür.
Veya bunun gibi özellikleri dinamik olarak hariç tutabilirsiniz,
Bhargav Patel2019-04-102019-04-10 20:40:29Z
Merhaba Bu basit bir sıralama deneyebilirsiniz
Dhaval Gohel2017-05-262017-05-26 09:28:09Z
Bu sayfada sunulan birçok seçenek vardır, seçeneklerin çoğu yanlış olduğu için (ya da cevapların kopyaları olduğu için değil) ancak uygun teknik, içinde bulunduğunuz duruma ve sizin ve / veya sizinki görevlerin hedeflerine bağlı olduğu için takım yerine getirmeye çalışıyor. Kesin olarak sorunuzu yanıtlamak için, bir bilmek gerekir:
Hedeflediğiniz ECMAScript sürümü
Sizin ve ekibinizin kullandığı programlama kuralları / kalıpları. İşlevsel yaklaşımları destekliyor musunuz ve mutasyon ekibinizde verboten mi yoksa vahşi batı mutasyonlu nesne yönelimli teknikler kullanıyor musunuz?
Değişken nesne özelliği silme, güvensiz
Bu kategori, orijinal referansı kullanmak / devam ettirmek ve kodunuzda vatansız fonksiyon ilkeleri kullanmamak istediğinizde, değişmezler veya nesne örnekleri üzerinde çalışmak içindir. Bu kategorideki örnek bir sözdizimi parçası:
Dinlenme tabanlı dize özellik ihmali
Bu kategori, değişken olmayan bir yaklaşım istendiğinde ve Symbol tuşlarını hesaba katmanız gerekmediğinde, yeni ECMAScript tatlarındaki düz nesne veya dizi örnekleri üzerinde çalışmak içindir.
Değişken nesne özellik silme, güvenli
Bu kategori, yapılandırılamayan özelliklere atılan istisnalara karşı korunurken orijinal referansı kullanmak / devam ettirmek istediğinizde nesne değişmezleri veya nesne örnekleri üzerinde çalışmak içindir:
Buna ek olarak, yerinde nesneleri mutasyon yapmak vatansız olmasa da, Reflect.deleteProperty kısmi uygulama ve delete ifadelerle mümkün olmayan diğer fonksiyonel teknikleri yapmak için işlevsel doğasını kullanabilirsiniz .
Sözdizimi tabanlı dize özellik ihmali
Kütüphane tabanlı mülk ihmali
Bu kategori genellikle, Semboller için muhasebe ve bir ifadede birden fazla özellik bulunmaması dahil olmak üzere daha fazla işlevsel esnekliğe izin verir:
ConcurrentBag <> 'dan tek, belirli bir nesne nasıl kaldırılır?
Saklı yordamın sonuçlarını geçici bir tabloya ekleyin.
AngularJS'de ng-repeat ile tuşlar ve değerler üzerinde yineleme nasıl yapılır?
Git'te silinmiş bir dosyayı ayırma
Liste <T> Sırayla Alfabetik Sırayla
Belirli alanlardaki kopyaları bulmak için ifadeyi seçin
Swift'deki bir diziye öğe ekleme
Bir GUID'i, özellikle performans açısından birincil anahtar olarak kullanmak için en iyi yöntemler nelerdir?
Haskell / GHC `de` forall` anahtar kelimesi ne işe yarar?
Python'da yürütülebilir olup olmadığını test edin?
Klasörleri Eclipse aramasından hariç tut