SORU
19 Ocak 2011, ÇARŞAMBA


Javascript birleştirme nesneleri için doğal yolu

Javascript Nesne herhangi bir yerli birleştirme işlemi yok. Eğer iki nesne varsa, söyle

{a:1, b:2}
{c:3, d:4}

Ve almak istiyorum

{a:1, b:2, c:3, d:4}

Bildiğim kadarıyla, nesneler arasında dolaşmak gerekir. Bu karar da bir birleştirme solda söylemek ya da doğru strateji birleştirmek ve sonra (basit) gibi bir şey

for (key in object2) {
  object1[key] = object2[key];
}

Bu gayet iyi. Ancak, Javascript call prototype özelliğine sahiptir. Örneğin, Array arguments dönüm ile yapılabilir

Array.prototype.slice.call(arguments)

Bu yaklaşım, mevcut yerel kod patlatır, ve bu yüzden programcı çılgınlık daha az açıktır ve daha hızlı, yerel olmayan bir uygulaması daha iyi çalışması gerekir.

Soru

Yok bir numara kullanın Bu prototip/çağrı desen belki Attribute Node geçişi özellikleri DOM, ya da belki de, bazı genel String fonksiyonları için bir yerel nesne birleştirme?

Kod şöyle görünecektir

var merged = somethingrandom.obscuremethod.call(object1, object2)

Ve sonuç olarak, yerel bir geçiş olmadan birleştirme alırsın.

Sub-optimal bir cozum

Eğer kullanım constructor özelliği Object ve sonra zorlamak bir nesne için yapıcı bir nesne ve sonra Çalıştır new üzerinde bileşik nesne, olabilir bir birleştirme için ücretsiz. Ama bu çağrıyı yapmak için javascript constructor özelliği tam sonuçlarını kavrayabilmiş değilim.

Lemma

Aynı soru Arrays için de geçerlidir. Ortak bir sorun olduğunu, sayı 7 dizileri bu dizilerin kesişimi bulmak için deneyin. Bu rakamlar her 7 diziler var ki!

Onlarla birlikte, daha sonra bir sıralama yapmak, ve sonra bir geçiş yapmak, kesinlikle herhangi bir parametre olabilir. Ama eğer genel bir bilgisayar yerel olarak yapmak için bir dizi ikna edebileceğimiz bir yere kapatılmış varsa iyi olurdu.

Herhangi bir düşünce?

düzenleme:

Yolun yarısını alıyorum

Dizi sorun için, aşağıdakileri yapabilirsiniz:

dizi.herhangi bir parametre(a, b, c).() tür.(':') ve daha sonra çapraz sırada RegExp karmaşık bir yakalama ve tekrar desenleri kullanın. birleşim Biliyor musun eğer mi RegExp uygulamaları, çok basit bir yığın tabanlı bir sanal makine üzerinde çalışır. Gerçekten derlenmiş aldığı bir programın düzenli ifade (RegExp.başlatılamıyor derleme itiraz JS bir yöntem). Daha sonra yerel kavurucu hızlı bir şekilde dize üzerinde çalışır. Belki üyelik eşikleri için istismar ve daha iyi performans elde ediyorsun.

Yine de tüm yol olsa gitmez.

CEVAP
19 Ocak 2011, ÇARŞAMBA


Bu cevabım hayal kırıklığı olacak, ama yine de:

hayır

Bu basit nedeni: birleştirme Bay Resig uygulaması (ya da "denir" nesneleri) bir WordPress kullanmak bir döngü, söz gibi yapıyor uzatın. Bu here arayabilirsiniz. Ve eğer John Resig bir zeki-inşa bunu yapmak için bir yol buldu bulmazlarsa, o zaman stackoverflow sadece ölümlüler olmaz ya :) diyebilirim

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DorkmanScott

    DorkmanScott

    14 NİSAN 2006
  • eyes4beautee

    eyes4beautee

    17 HAZİRAN 2011
  • hydejiaqi

    hydejiaqi

    12 Mart 2008