Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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 KnockoutJS:从数组中删除项目数组_Knockout.js - Fatal编程技术网

Knockout.js KnockoutJS:从数组中删除项目数组

Knockout.js KnockoutJS:从数组中删除项目数组,knockout.js,Knockout.js,我对knockoutJS有个问题我搞不懂 我有两个耳环;一个包含所有可用项,另一个包含所有选定项 如何返回一个新数组,其中包含所有可用项(所有选定项都已从中删除)?标准removeAll方法应处理此问题。从文件: removeAll(['Chad',132,undefined])删除所有 等于'Chad',123或未定义的值,并作为 排列 是否需要提取可用项而不更改原始的“所有可用项”数组?如果要返回新数组而不修改原始数组,最好使用计算的可观测项 var ViewModel = function

我对knockoutJS有个问题我搞不懂

我有两个耳环;一个包含所有可用项,另一个包含所有选定项


如何返回一个新数组,其中包含所有可用项(所有选定项都已从中删除)?

标准removeAll方法应处理此问题。从文件:

removeAll(['Chad',132,undefined])删除所有 等于'Chad',123或未定义的值,并作为 排列


是否需要提取可用项而不更改原始的“所有可用项”数组?

如果要返回新数组而不修改原始数组,最好使用计算的可观测项

var ViewModel = function(){
    this.available = ko.observableArray([1,2,3,4,5]);
    this.selected = ko.observableArray([1,3,5]);

    this.remaining = ko.computed(function(){
        var remaining = ko.observableArray();
        remaining(ko.toJS(this.availableOptions))
        remaining.removeAll(this.selectedOptions());
        return remaining();
    }, this);
}
下面是一个链接,指向一个工作示例:


编辑:固定样本代码。

我会使用
.filter
ko.utils.arrayFilter
,和
.indexOf
或同等工具:

this.remainingOptions = ko.computed(function(){
    return this.availableOptions().filter(function(option) {
        return this.selectedOptions().indexOf( option ) === -1;
    }.bind(this));
},this);
小提琴:

编辑:如果您想要更高效的
.map
.filter
方法,也可以查看该插件

因为我的具体问题是,包含对象的数组(我在问题中没有说明)。提供的答案并没有解决我的问题,尽管它很好地回答了这个问题,这就是为什么我不改变答案的原因

对于任何对我如何解决问题感兴趣的人,以下是代码:

    var self = this;
    self.users = ko.observableArray([]);
    self.roles = ko.observableArray([]);
    self.selectedUser = ko.observable();

    self.remainingOptions = ko.computed(function () {
        return (self.roles()).filter(function (option) {
            var current = option.Name();
            var keep = true;
            if (self.selectedUser() !== undefined) {
                ko.utils.arrayFirst(self.selectedUser().Roles(), function (item) {

                    if (keep) {
                        keep = (current !== item.Name());
                    }
                    return (current === item.Name());
                });
            }
            return keep;
        }); //end  filter
    }); //end remaininOptions

角色对象只是一个具有Name属性的对象。

Hmm。。这并不像我预期的那样有效。我需要的是可观察的耳环“可用”保持不变。和包含值“2,4”的“剩余”。看起来直接访问可用选项有问题。上面更新的代码示例应该可以工作。检查JSFIDLE,我相信它会返回您期望的结果。是的,没错。。我需要原始的allAvailableArray保持不变