Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Knockout.js 淘汰:筛选数组中的数组_Knockout.js_Knockout 2.0_Knockout Mvc - Fatal编程技术网

Knockout.js 淘汰:筛选数组中的数组

Knockout.js 淘汰:筛选数组中的数组,knockout.js,knockout-2.0,knockout-mvc,Knockout.js,Knockout 2.0,Knockout Mvc,我有一个命名项数组,其中每个都包含其他命名项数组(某种树)。我需要在两个数组中实现按名称过滤 因此,我检查第一个数组的每个项的名称: 如果名称合适,我将显示实体分支 如果名称不合适,我将检查子数组: 如果子数组不包含合适的命名项,则不显示分支 如果子数组包含合适的命名项,我只显示带有合适项的分支 我以下一种方式实施了它: ko.utils.stringStartsWith = function (string, startsWith) { if (startsWith.lengt

我有一个命名项数组,其中每个都包含其他命名项数组(某种树)。我需要在两个数组中实现按名称过滤

因此,我检查第一个数组的每个项的名称:

  • 如果名称合适,我将显示实体分支
  • 如果名称不合适,我将检查子数组:
    • 如果子数组不包含合适的命名项,则不显示分支
    • 如果子数组包含合适的命名项,我只显示带有合适项的分支
我以下一种方式实施了它:

ko.utils.stringStartsWith = function (string, startsWith) {
    if (startsWith.length > string.length)
        return false;

    return string.substring(0, startsWith.length) === startsWith;
};

$(function () {
    var vm = {
        search: ko.observable(''),
        items: ko.observableArray([])
    };

    //jsonData - my data
    $.each(jsonData, function (i, jItem) {
        var item = {
            name: jItem.Name,
            search: ko.observable(''),
            subItems: ko.observableArray([])
        };

        $.each(jItem.Items, function (j, jsubItem) {
            var subItem = {
                name: jsubItem.Name,
            };

            item.subItems.push(subItem);
        });

        item.filteredSubItems = ko.computed(function () {
                var self = this;

                return ko.utils.arrayFilter(this.subItems(), function (fsubItem) {
                    if (self.search().length == 0
                        || ko.utils.stringStartsWith(fsubItem.name.toLowerCase(), self.search().toLowerCase())) {
                        return true;
                    }

                    return false;
                });
            }, item);
        vm.items.push(item);
    });

    vm.filteredItems = ko.computed(function () {
        var self = this;

        return ko.utils.arrayFilter(this.items(), function (fitem) {
            if (self.search().length == 0
                || ko.utils.stringStartsWith(fitem.name.toLowerCase(), self.search().toLowerCase())) {
                fitem.search('');
                return true;
            }

            fitem.search(self.search());

            if (fitem.filteredSubItems().length != 0)
                return true;

            return false;
        });
    }, vm);

    ko.applyBindings(vm);
});
因此,它工作得很好,但对我来说,
filteredItems
的计算看起来像是一个丑陋的解决方法。此外,我关心解决方案的性能


有谁知道更多的glade解决方案吗?

半年前我问了这个问题,但我忘了说我找到了这个问题的答案。好的简单的解决办法是。

半年前我问了这个问题,但我忘了说我找到了这个问题的答案。好的简单的解决方案是。

什么是
更多的glade解决方案
?@Maslow我是ko的新手。所以我不想重新实现现有的解决方案。我以为有过滤嵌套过滤器。但是看起来没有。所以从这个角度来看,我的问题没有意义。什么是
更多的glade解决方案?@Maslow我是ko的新手。所以我不想重新实现现有的解决方案。我以为有过滤嵌套过滤器。但是看起来没有。所以从这个角度来看,我的问题没有意义。