Javascript 内部过滤器在敲除JS中工作不正常

Javascript 内部过滤器在敲除JS中工作不正常,javascript,knockout.js,Javascript,Knockout.js,我有一个大小为3的静态数据数组 我在右边显示数组 上面有一个用于过滤的文本框。 我买了两个模型 一个是字段,第二个是子字段 一个字段可以有多个子字段。 我正在过滤字段以及子字段。 它在字段上工作,但在子字段上显示一些输出。 只有一个条件,即如果在数组中添加了字段的过滤数据,则它不应进入子字段,如果在字段中未找到匹配项,则它可以进入子字段,然后将数据添加到过滤数组中 我的问题是在您用于过滤数据的情况下。由于您有两个以上的子字段,因此对于每个子字段的匹配,相同的数据被推入arr,这是获得意外结果的主

我有一个大小为3的静态数据数组

我在右边显示数组

上面有一个用于过滤的文本框。 我买了两个模型

一个是
字段
,第二个是
子字段

一个字段可以有多个子字段。 我正在过滤
字段
以及
子字段
。 它在字段上工作,但在
子字段上显示一些输出。
只有一个条件,即如果在数组中添加了
字段的过滤数据
,则它不应进入
子字段
,如果在字段中未找到匹配项,则它可以进入
子字段
,然后将数据添加到过滤数组中


我的

问题是在您用于过滤数据的情况下。由于您有两个以上的子字段,因此对于每个子字段的匹配,相同的数据被推入arr,这是获得意外结果的主要原因

 self.filteredList = ko.computed(function() {
  var filter = self.filter(),
  arr = [];
if (filter) {
  ko.utils.arrayForEach(self.controlFields(), function(item) {
    if (item.code().match(filter) || item.title().toLowerCase().match(filter.toLowerCase())) {
      arr.push(item);
    }
      ko.utils.arrayForEach(item.subFields(), function(sf) {
        if (sf.title().toLowerCase().match(filter.toLowerCase())) {
          var found = ko.utils.arrayFirst(arr, function(k) {
            return item.title() === k.title() && item.code()===k.code();
          });
          if (!found) {
            arr.push(item);
          }
        }
      });

   });
  } else {
   arr = self.controlFields();
  }
 return arr;
});

您面临的问题。我认为它工作得很好。@Akhlesh-当我在文本框中写入
s
时,它正在重复主要字段。@Akhlesh-链接显示
未找到
,链接已过期或拼写错误。该链接已过期。看看这个@Akhlesh-当我添加
t
然后重复两次当我添加
e
时,会有很多重复。是的,它工作得很好。。对不起,我对淘汰赛了解不多,所以陷入了困境。顺便说一句,再次感谢你们。嘿,阿赫莱什,你们知道如何使用敲除加载静态资源吗?我已经发布了一个问题,若你们有时间,你们会看到吗