gpt4 book ai didi

knockout.js - 如何在KnockoutJS中使用indexOf

转载 作者:行者123 更新时间:2023-12-03 07:56:30 28 4
gpt4 key购买 nike

我看到的在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

关于knockout.js - 如何在KnockoutJS中使用indexOf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6926155/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com