2011-08-03 11 views
32

KnockoutJS'deki IndexOf() yöntemini kullandığım tüm örnekler temel dize türleridir. Bilmek istediğim, nesne değişkenlerinden birine dayanan bir nesnenin dizininin nasıl döndürüleceğidir.KnockoutJS'de indexOf kullanımı

cevap

61

Gözlemlenebilir bir Array, ko.utils.arrayIndexOf için bir sarmalayıcıdır ve adlı bir yöntemdir. öğeyi varsa

Yani, bunu yapabilirsiniz:

var viewModel = { 
    items: ko.observableArray([{id: 1, name: "one"}, {id:2, name: "two"}]) 
}; 

var item = viewModel.items()[1]; 

console.log(viewModel.items.indexOf(item)); //equals 1 

sadece bir anahtar gibi bir şey varsa, o zaman KO sadece maç çalışıyor dizisi döngüler ko.utils.arrayFirst adlı bir yardımcı program işlevi bulunur ona geçmen şart. Bununla birlikte, öğeyi döndürür ve dizinini döndürmez. Nesneyi almak için biraz verimsiz olur ve dizinin içinden iki geçiş yapacağınız gibi indexOf'u çağırırsınız.

Sadece kendine doğru öğe arayan bir döngü yazmak ya gibi görünecektir ko.utils.arrayFirst dayalı bir jenerik fonksiyon yazabiliriz: Şimdi

function arrayFirstIndexOf(array, predicate, predicateOwner) { 
    for (var i = 0, j = array.length; i < j; i++) { 
     if (predicate.call(predicateOwner, array[i])) { 
      return i; 
     } 
    } 
    return -1; 
} 

, sen bir durumun bir dizi geçebilir ve eşleşen ilk öğenin dizinine dönersiniz.

var viewModel = { 
    items: ko.observableArray([{ 
     id: 1, 
     name: "one"}, 
    { 
     id: 2, 
     name: "two"}]) 
}; 

var id = 2; 

console.log(arrayFirstIndexOf(viewModel.items(), function(item) { 
    return item.id === id;  
})); //returns 1 
+0

Örneğinizde item.id === id; iade item.id() === id ;? Buna çok yakın bir şey yapmaya çalışıyorum ve() vardı. – NullReference

+1

Sadece "id" nin gözlenebilir olup olmadığına bağlıdır. Bu durumda değil, ama sizin için olduğu gibi geliyor. –