SORU
28 Ocak 2011, Cuma


Temiz javascript diziden öğe kaldırmak için yol (jQuery ile)coffeescript

Bu konuda pek çok soru var, az değil: jQuery version of array contains, a solution with the splice method ve çok daha fazlası. Ancak, hepsi karmaşık ve can sıkıcı görünüyor.

Javascript, DV ve coffeescript Birleşik güçler ile, javascript bir diziden öğe kaldırmak için çok temiz yolu nedir? Önceden Endeksi bilmiyoruz. Kod:

a = [4,8,2,3]
a.remove(8)     # a is now [4,2,3]

Bir iyi yerleşik yöntem başarısız, javascript diziler böyle bir yöntem destek için uzanan temiz bir yolu nedir? Eğer yardımı olacaksa, gerçekten ayarlar gibi diziler kullanıyorum. Çözümleri ideal güzel bir WordPress kullanmak desteği ile coffeescript çalışacak. Ayrıca, daha az hız umrumda değil, ama bunun yerine net ve basit bir kod ön planda.

CEVAP
28 Ocak 2011, Cuma


CoffeeScript:

Array::remove = (e) -> @[t..t] = [] if (t = @indexOf(e)) > -1

Sadece pozisyon e bulunduğu t, Endeksi ise aslında t > -1 bulundu (varsa) eleman eklemeler. Coffeescript bu çevirir:

Array.prototype.remove = function(e) {
    var t, _ref;
    if ((t = this.indexOf(e)) > -1) {
        return ([].splice.apply(this, [t, t - t   1].concat(_ref = [])), _ref);
    }
};

Ve eğer eşleşen tüm öğeleri kaldırmak ve yeni bir dizi döndürür, CoffeeScript ve jQuery kullanarak isterseniz:

Array::remove = (v) -> $.grep @,(e)->e!=v

çeviren:

Array.prototype.remove = function(v) {
    return $.grep(this, function(e) {
        return e !== v;
    });
};

Veya jQuery olmadan aynı şeyi grep:

Array::filterOutValue = (v) -> x for x in @ when x!=v

çeviren:

Array.prototype.filterOutValue = function(v) {
    var x, _i, _len, _results;
    _results = [];
    for (_i = 0, _len = this.length; _i < _len; _i  ) {
        x = this[_i];
        if (x !== v) {
            _results.push(x);
        }
    }
    return _results;
};

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FrameCityJackal

    FrameCityJac

    4 Aralık 2010
  • ShotgunSandwichENT

    ShotgunSandw

    3 EKİM 2012
  • Wild Academy

    Wild Academy

    8 Aralık 2009