Javascript 如何迭代ko.ObervableArray

Javascript 如何迭代ko.ObervableArray,javascript,html,knockout.js,Javascript,Html,Knockout.js,我有这样的结构: MyApp.User = function() { var self = this; self.ID = ko.obervable(); self.Name = ko.obervable(); self.LastName = ko.observable(); } MyApp.UserHub = function() { self.users = ko.observableArray(); $.getJSON("url", f

我有这样的结构:

MyApp.User = function()
{
    var self = this;
    self.ID = ko.obervable();
    self.Name = ko.obervable();
    self.LastName = ko.observable();
}

MyApp.UserHub = function()
{
    self.users = ko.observableArray();

     $.getJSON("url", function (data) {
         var mappedUser = $.map(data.UsersFromJson, function (item) {
             return new MyApp.User(item);
         });
         self.users(mappedUsers);
     });
}
我有一个ObservalArray,我使用一个HTML请求和一个JSON(工作正常)填充它。问题是,我希望能够在observableArray中搜索用户,提供可以包含在
LastName
FirstName
中的信息。大概是这样的:

self.searchedUsers = ko.observableArray();
for(var item in users)
{
    if(item.FirstName.Contains(query) || item.LastName.Contains(query))
    {
         self.searchedUser.push(item);
    }
}

Query是我要搜索的输入文本值。有人能帮我重复一下这个
observearray

通常,您需要创建一个计算的可观察对象来表示数组的过滤版本

所以,你会有这样的想法:

self.users = ko.observableArray();
self.query = ko.observable();
self.filteredUsers = ko.computed(function() {
    var query = self.query();    

    return ko.utils.arrayFilter(self.users(), function(user) {
        return user.FirstName.indexOf(query) > -1 || user.LastName.indexOf(query) > -1;
    });
});

通常,您希望创建一个计算的可观察对象来表示数组的过滤版本

所以,你会有这样的想法:

self.users = ko.observableArray();
self.query = ko.observable();
self.filteredUsers = ko.computed(function() {
    var query = self.query();    

    return ko.utils.arrayFilter(self.users(), function(user) {
        return user.FirstName.indexOf(query) > -1 || user.LastName.indexOf(query) > -1;
    });
});

我还认为您必须迭代self.users()而不是users


users是observearray函数,而users()提供对底层数据的访问。

我还认为您必须迭代self.users()而不是users

users是ObservalArray函数,而users()提供对底层数据的访问