根据knockout foreach循环中的另一组数据过滤返回的数据

时间:2014-02-05 15:40:26

标签: c# knockout.js foreach

所以我有两组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 
     });
}

});

2 个答案:

答案 0 :(得分:0)

有很多方法。 2从头顶开始:

创建数组时,如果对象已在用户中,则不要将其放在用户中 有一个bool函数,它返回FullUser是否是Users的成员并将Visibility绑定到该结果(以及结果的NOT)。

你想象力可以提供的任何其他方式......

答案 1 :(得分:0)

假设a)UsersFullUsers的内容是原始类型(例如字符串)或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);