2011-08-03 5 views
32

KnockoutJSでIndexOf()メソッドを使用した例は、すべて基本的な文字列型です。私が知りたいのは、オブジェクト変数の1つに基づいて、オブジェクトである配列のインデックスを返す方法です。KnockoutJSでindexOfを使用する方法

答えて

61

observableArrayはindexOfというメソッドを公開します。これはラベラーでko.utils.arrayIndexOfになります。このメソッドは、渡されたアイテムを探して配列をループします。

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 

あなただけのキーのようなものを持っている場合は、KOがちょうど一致しようとしている配列をループko.utils.arrayFirstというユーティリティ機能を持っている:あなたはあなたができるアイテムを持っているのであれば

、あなたがそれに渡す条件。ただし、アイテムのインデックスではなくアイテムを返します。配列を2回通過するように、オブジェクトを取得してindexOfを呼び出すのは、やや非効率です。あなたは、自分だけが正しいアイテムを探してループを記述するかのようになりますko.utils.arrayFirstに基づいて、一般的な機能書くことができ

:今

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; 
} 

を、あなたは、配列、条件を渡すことができます、一致する最初の項目のインデックスが返されます。

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

例ではitem.id === idを返さないでください。 return item.id()=== id ;?私はこれに非常に近い何かをしようとしていて、()を持っていなければならなかった。 – NullReference

+1

'id'が観測可能かどうかだけで決まります。この場合はそうではありませんが、あなたのように聞こえます。 –

関連する問題