在给定对象id数组的情况下,对可观察对象数组执行函数

时间:2013-05-28 16:39:26

标签: javascript knockout.js

给出以下数组:

var arrayOfIds = ko.observableArray(["2", "3"]);

以下对象数组:

var arrayOfObjects = ko.observableArray([
    {
        "id": "1",
        "title": "Test Folder",
    },
    {
        "id": "2",
        "title": "Test Folder",
    },
    {
        "id": "3",
        "title": "Test Folder",
    },
    {
        "id": "4",
        "title": "Test Folder",
    },
])

如何才能有效地对id数组中指定的对象执行操作?

具体来说,我正在尝试:

arrayOfObjects.remove(<items 2 and 3 from the id array>). 

我有什么:

arrayOfObjects.remove(function (item) {
                return arrayOfIds().contains(item.id);
            });

但是我不能在数组上使用“contains”...

我也试过这个:

innerModel.folders.remove(function (item) {
                return $.inArray(item.id, selectedFolders()) > 0;
            });

2 个答案:

答案 0 :(得分:1)

传递一个接受数组项的回调函数,它会遍历项目并删除那些返回true的项目。

arrayOfObjects.remove(function (item){
    return item.id === '2' || item.id === '3';
});

或者使用jQuery inArray函数来检查许多值:

arrayOfObjects.remove(function (item){
    var itemsToRemove = ['2','1','4','7'];
    return  $.inArray(item.id, itemsToRemove) !== -1;
});

答案 1 :(得分:0)

我最终做了:

ko.utils.arrayForEach(arrayOfIds(), function (folderId) {
                arrayOfObjects.remove(function (folder) {
                    if (folder.folderId() === folderId) {
                        return true;
                    }
                    return false;
                });
            });