0

给定以下 id 数组:

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);
            });

但我不能在数组上使用“包含”...

我也试过这个:

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

2 回答 2

1

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

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

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

arrayOfObjects.remove(function (item){
    var itemsToRemove = ['2','1','4','7'];
    return  $.inArray(item.id, itemsToRemove) !== -1;
});
于 2013-05-28T17:00:07.530 回答
0

我最终做了:

ko.utils.arrayForEach(arrayOfIds(), function (folderId) {
                arrayOfObjects.remove(function (folder) {
                    if (folder.folderId() === folderId) {
                        return true;
                    }
                    return false;
                });
            });
于 2013-05-28T19:19:29.937 回答