SORU
4 Mart 2011, Cuma


Nasıl Javascript değerleri ile ilişkilendirilebilir bir dizi sıralamak için?

İlişkisel dizi var:

array["sub2"] = 1;
array["sub0"] = -1;
array["sub1"] = 0;
array["sub3"] = 1;
array["sub4"] = 0;

Sonuç bu sırada: ilgili endeksleri ile bir dizi olacağı değerlerine göre sırala (azalan) için en zarif yolu nedir

sub2, sub3, sub1, sub4, sub0?

CEVAP
4 Mart 2011, Cuma


Javascript" onları düşünüyorsun. diziler "çağrışımsal yok Bunun yerine, sadece nesne özellikleri dizi-gibi sözdizimi (örnek olarak), artı bir nesnenin özelliklerini yinelemek için yeteneğini kullanarak ayarlamak için yeteneği var.

Bu sonuç için garanti yoksiparişhangi onlar için bir sıralama gibi bir şey yok yani özellikleri üzerinde yineleme,. Bunun yerine, bir "" dizi sipariş garantisi yok. gerçek içine nesne özellikleri dönüştürmek gerekir İşte iki dizilerini (iki elemanlı dizi) bir dizi içine bir nesne dönüştürmek için bir kod parçası, senin de söylediğin gibi bu sıralama, o zaman içinde dolaşmak:

var tuples = [];

for (var key in obj) tuples.push([key, obj[key]]);

tuples.sort(function(a, b) {
    a = a[1];
    b = b[1];

    return a < b ? -1 : (a > b ? 1 : 0);
});

for (var i = 0; i < tuples.length; i  ) {
    var key = tuples[i][0];
    var value = tuples[i][1];

    // do something with key and value
}

Daha doğal bir geri alan bir fonksiyon şu işi bulabilirsiniz:

function bySortedValue(obj, callback, context) {
    var tuples = [];

    for (var key in obj) tuples.push([key, obj[key]]);

    tuples.sort(function(a, b) { return a[1] < b[1] ? 1 : a[1] > b[1] ? -1 : 0 });

    var length = tuples.length;
    while (length--) callback.call(context, tuples[length][0], tuples[length][1]);
}

bySortedValue({
    foo: 1,
    bar: 7,
    baz: 3
}, function(key, value) {
    alert(key   ": "   value);
});

bySortedValue(someObj, this.method, this);

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • eyes4beautee

    eyes4beautee

    17 HAZİRAN 2011
  • FlippinWindows | #1 Windows Tutorial Channel!

    FlippinWindo

    23 Mayıs 2010
  • tunez4you

    tunez4you

    20 EKİM 2008