【问题标题】:Knockout Filter observableArray against another observableArray针对另一个 observableArray 淘汰过滤器 observableArray
【发布时间】:2015-05-27 02:57:16
【问题描述】:

假设我有一个名为completeArray 的observableArray 和另一个名为pickedArray 的observableArray,第二个数组(pickedArray) 包含了completeArray 的一些对象。从这 2 个数组中,我需要创建另一个 observableArray,它将包含我的 completeArray 中不在pickedArray 中的所有对象。如果有人可以帮助我如何完成,请在需要澄清的情况下发表评论。谢谢!

【问题讨论】:

    标签: knockout.js


    【解决方案1】:

    使用completeArraypickedArray 之间差异的computed observable 数组。

    Javascript

    var ViewModel = function () {
        var self = this;
    
        self.completeArray = ko.observableArray([{id: 1, name: "john"}, {id: 2, name: "bill"}, {id: 3, name: "tom"}]);
        self.pickedArray = ko.observableArray([{id: 1, name: "john"}, {id: 3, name: "tom"}]);
    
        self.diffArray = ko.computed(function() {
            return ko.utils.arrayFilter(self.completeArray(), function(completeItem) {
                var sameItem = false;
    
                ko.utils.arrayForEach(self.pickedArray(), function(pickedItem) {
                    if(pickedItem.id == completeItem.id && pickedItem.name == completeItem.name) {
                        sameItem = true;
                        return; // break out of this loop
                    }
                });
    
                return !sameItem;
            });
        }, self);
    };
    
    $(function () {
        var vm = new ViewModel();
        ko.applyBindings(vm);
    });
    

    HTML

    <h1>Complete Array</h1>
    <div data-bind="foreach: completeArray()">
        <span data-bind="text: $data.name"></span>
    </div>
    
    <h1>Picked Array</h1>
    <div data-bind="foreach: pickedArray()">
        <span data-bind="text: $data.name"></span>
    </div>
    
    <h1>Diff Array</h1>
    <div data-bind="foreach: diffArray()">
        <span data-bind="text: $data.name"></span>
    </div>
    

    输出

    完整数组
    约翰比尔汤姆

    选择数组
    约翰·汤姆

    差异数组
    账单

    示例

    http://jsfiddle.net/jdtjmy6u/3/

    【讨论】:

    • 甜蜜!这几乎是完美的,但与我的数组不兼容,因为我的 observableArray 在每个对象上都有 2 个值,{id,name},{id,name} 我需要修改什么才能比较我的 observableArray 对象的 ID 值?
    • 你认为有办法让 observableArray 的对象工作吗?
    • 谢谢!这正是我正在寻找的! :)
    猜你喜欢
    • 2017-10-23
    • 2014-10-28
    • 2014-04-03
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多