KnockoutJSでIndexOf()メソッドを使用した例は、すべて基本的な文字列型です。私が知りたいのは、オブジェクト変数の1つに基づいて、オブジェクトである配列のインデックスを返す方法です。KnockoutJSでindexOfを使用する方法
32
A
答えて
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
例ではitem.id === idを返さないでください。 return item.id()=== id ;?私はこれに非常に近い何かをしようとしていて、()を持っていなければならなかった。 – NullReference
'id'が観測可能かどうかだけで決まります。この場合はそうではありませんが、あなたのように聞こえます。 –