我有一个JavaScript对象,如下所示:
{
"filters": [
{
"name": "Test",
"items": [
{
"id": 1207700620,
"checked": false
},
{
"id": 1207825584,
"checked": false
},
{
"id": 1207969166,
"checked": true
}
]
},
{
"name": "Empty",
"items": []
},
{
"name": "ThirdList",
"items": [
{
"id": "1207828314",
"checked": true
},
{
"id": "1236723086",
"checked": false
},
{
"id": "1208005603",
"checked": true
}
]
}
]
}
我的object
有一个名为filters
的数组。该数组包含多个对象。在每个对象中,有一个名为items
的数组。对于此items
数组中的每个元素,我需要检查checked
属性& if it is false, I need to delete that record (that item in items array)
。
我需要确保IE 8的兼容性。
我可以在过滤器数组上使用for循环,在这个for循环中,我可以使用另一个for循环来遍历items数组。我不想要这个apporach。
有没有更聪明的方法来通过lodash或jquery或任何其他JavaScript库实现这一点?
答案 0 :(得分:2)
obj.filters.forEach(function(filter) {
filter.items = filter.items.filter(function(el) {
return el.checked;
});
});
检查下面的例子。
var obj = {
"filters": [
{
"name": "Test",
"items": [
{
"id": 1207700620,
"checked": false
},
{
"id": 1207825584,
"checked": false
},
{
"id": 1207969166,
"checked": true
}
]
},
{
"name": "Empty",
"items": []
},
{
"name": "ThirdList",
"items": [
{
"id": "1207828314",
"checked": true
},
{
"id": "1236723086",
"checked": false
},
{
"id": "1208005603",
"checked": true
}
]
}
]
};
obj.filters.forEach(function(filter) {
filter.items = filter.items.filter(function(el) {
return el.checked;
});
});
alert( JSON.stringify(obj, null, 4) );

对于IE8兼容性,您可以使用polyfill或ES5垫片。
如果你可以使用Underscore / Lo-Dash,另一种选择,你可以使用模拟方法:_.each
和_.filter
而不是Array.prototype.forEach
和Array.prototype.filter
:
_.each(obj.filters, function(filter) {
filter.items = _.filter(filter.items, function(el) {
return el.checked;
});
});