gpt4 book ai didi

javascript - ko.utils.arrayFilter 无法正常工作

转载 作者:行者123 更新时间:2023-11-30 17:38:10 25 4
gpt4 key购买 nike

我试图通过忽略已经在先前列表中的用户来过滤数组:

FullList: Tom, Tim, Jim, Jill
UsersList: Tom, Jill

在另一位成员的帮助下,我能够使用这个数组过滤器,但问题是过滤器结果与 usersList 相同:Tom、Jill,我希望过滤器结果为 Tim、Jim

var viewModel = function(data){
var _self = {};
var FullUsers = ko.observableArray([]);
var Users = ko.observableArray([]);

_self.UsersList = function(data){
$.each(data, function(index, user) {
_self.Users.push(new userViewModel(user));
}
}

_self.FullList = function(data){
$.each(data, function(index, user) {
_self.FullUsers.push(new userViewModel(user));
}
}
this._FilteredUsers=ko.computed(function() {
return ko.utils.arrayFilter(_self.FullUsers(), function(item) {
return ko.utils.arrayIndexOf(_self.Users(), item)<0;
});
});
}

我有两种不同的获取方法,一种用于获取用户,另一种用于获取完整用户 - 它们都是相同的,唯一的区别是我传递给其中一个的 ID,而另一个不需要传递的 ID。

查看数据绑定(bind)

<div data-bind="foreach: _FilteredUsers">
<span data-bind="text: Name"></span>
</div>

我怎样才能改变代码使我的结果是蒂姆,吉姆?

基于上述代码的当前结果 - 我得到 FullUsers,包括我不想显示的一次。当我翻转 Users()FullUsers() 我只得到用户列表

最佳答案

您需要使用 arrayFirst 在 Users ObservableArray 中搜索匹配项(如果任何过滤器函数返回 true,则返回 true)。由于您希望完整列表中的用户不在普通列表中,因此您将 ! 添加到 arrayFirst。如果要过滤的属性是可观察的,请确保将 () 添加到属性的末尾。

this._FilteredUsers=ko.computed(function() {
return ko.utils.arrayFilter(_self.FullUsers(), function(fuitem) {
return !ko.utils.arrayFirst(_self.Users(), function(item) {
return fuitem.Name() === item.Name(); //replace .Name with the attribute you want to match on
});
});

关于javascript - ko.utils.arrayFilter 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21607409/

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