如何从数组jQuery简化此删除

时间:2015-09-24 14:00:18

标签: javascript jquery arrays object

我有一个对象和一组应该保留在对象中的类别。这个剪辑https://jsfiddle.net/h10rkb6s/2/(参见日志)有效,但我似乎无法理解它是复杂的简单搜索和保持任务的想法。

var thz_icon_source = {"Spinners":["spinnericon1","spinnericon2"],"Awesome":["awesomeicon1","awesomeicon2"],"Others":["othericon1","othericon2"]};
var $categories = '["Spinners","Awesome"]';

var $CatsArray = JSON.parse($categories);
var groups = [];
for(var k in thz_icon_source) groups.push(k);



$.each($CatsArray,function(i,keep){

    var index = groups.indexOf(keep);
    if (index !== -1) {
        groups.splice(index, 1);
    }               

});

for (var i = 0; i < groups.length; i++) {
    delete thz_icon_source[groups[i]];
}

我试过

   $.each(thz_icon_source,function(category,icons){

            $.each($CatsArray,function(i,keep){

                var index = category.indexOf(keep);

                if (index !== -1) {
                    delete thz_icon_source[category];
                }                   

            });

        });

但这仅适用于我的搜索数组中有1个项目。 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

无需迭代$CatsArray以找出应删除哪些内容。您将需要迭代对象的键,并找出每个键是否应该被删除,以便按此过滤。

保持脚本的前三行不变,您可以简化为

var keysToDelete = Object.keys(thz_icon_source).filter(function(groupName) {
    return $CatsArray.indexOf(groupName) == -1;
});

$.grep将成为filter方法的jQuery-ism,如果您进入该方法。

但假设我们甚至不需要数组中的那些组,你可以简单地做

for (var groupName in thz_icon_source)
    if ($CatsArray.indexOf(groupName) == -1)
        delete thz_icon_source[groupName];

但是,我建议创建一个只包含您想要保留的对象,而不是从该对象中删除项目。它更容易使用:

var kept = {};
for (var i=0; i<$CatsArray.length; i++)
    kept[$CatsArray[i]] = thz_icon_source[$CatsArray[i]];