我有大小为3的静态数据数组。
我在右侧显示数组。
上面有一个文本框用于过滤。 我已经为它采取了2个模型。
一个是field
,第二个是subfield
。
一个字段可以有多个sub fields
。
我正在field
以及subfields
上进行过滤。
它适用于字段,但在subfields
上显示了一些堰输出。
只有一个条件是,如果在数组中添加field's filtered data
,那么它不应该用于subfield
,如果在字段中找不到匹配,则它可以进入subfields
然后添加数据到过滤数组。
我的fiddle
答案 0 :(得分:1)
问题是你用来过滤数据的情况。因为你有两个以上的子字段,所以对于子域的每个匹配,相同的数据被推入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;
});