我有一个对象和一组应该保留在对象中的类别。这个剪辑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个项目。 任何帮助表示赞赏。
答案 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]];