所以我有两组foreach循环,我用它来显示两组数据。第一个列表显示基于ID的用户列表,另一个列表显示基于另一个ID的更多用户。第一个用户列表也可以在第二个用户列表中找到。
我想知道有没有一种方法可以显示我的第二个用户列表,但只显示尚未出现在第一个用户列表中的用户?所以,如果在我的第一个名单中,我有:约翰,杰克,简。我目前的第二个名单是:John,Jack,Jane,Kim,Matt,Tom。我希望我的第二个清单只显示:Kim,Matt,Tom。
以下是我的foreachs:
<div data-bind="foreach: Users">
.....
</div>
<div data-bind="foreach: FullUsers">
......
</div>
用户和 FullUsers 均为ko.observableArray([]);
并使用相同的viewModel。
如何显示 FullUsers 的结果,而不显示用户中已存在的用户?
可能显示的计算结果:
this._FilteredUsers = ko.computed(function(){
var _list = this.AddFullUsers(); //all users (this.AddUsers) is list of certain users
if(_list() > 0){
return ko.utils.arrayFilter( _list(), function(item){
return something here that will return the filtered list of users that are not in this.AddUsers
});
}
});
答案 0 :(得分:0)
有很多方法。 2从头顶开始:
创建数组时,如果对象已在用户中,则不要将其放在用户中 有一个bool函数,它返回FullUser是否是Users的成员并将Visibility绑定到该结果(以及结果的NOT)。
你想象力可以提供的任何其他方式......
答案 1 :(得分:0)
假设a)Users
和FullUsers
的内容是原始类型(例如字符串)或b)它们是对象,如果同一个用户在两个列表中,它们都是引用同一个对象,然后你可以使用
this._FilteredUsers=ko.computed(function() {
var self=this;
return ko.utils.ArrayFilter(self.FullUsers(), function(item) {
return ko.utils.ArrayIndexOf(self.Users(), item)<0;
});
}, this);