32
我在KnockoutJS中使用IndexOf()方法所看到的所有示例都是基本的字符串類型。我想知道的是如何基於一個對象變量返回一個對象數組的索引。如何在KnockoutJS中使用indexOf
我在KnockoutJS中使用IndexOf()方法所看到的所有示例都是基本的字符串類型。我想知道的是如何基於一個對象變量返回一個對象數組的索引。如何在KnockoutJS中使用indexOf
一個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
效用函數,僅僅通過數組循環試圖匹配你傳遞給它的條件。但是,它返回該項目而不是它的索引。獲取對象然後調用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;返回item.id()=== id ;?我正在嘗試做一些非常接近的事情,並且必須有()。 – NullReference
只取決於'id'是否可以觀察。在這種情況下,它不是,但聽起來像是你。 –