这是jsfiddle
https://jsfiddle.net/sal1681/2043fumn/
当我执行代码时,它会为市场ATL返回一个子项,实际上它不应该为子项ATL返回任何内容,因为我按标志过滤设置为false。
这是代码
var json = JSON.parse('[
{
"market": "Atl",
"subItem": [
{
"comment_id": "1",
"flag": false,
"user_id": "32509"
},
{
"comment_id": "2",
"flag": false,
"user_id": "32510"
}
]
},
{
"market": "Chicago",
"subItem": [
{
"comment_id": "3",
"flag": true,
"user_id": "32501"
},
{
"comment_id": "4",
"flag": false,
"user_id": "32502"
}
]
}
]');
for(var i=0; i<json.length; i++) {
json[i].subItem = _.without(json[i].subItem, _.findWhere(json[i].subItem, {flag: false}));
};
console.log(JSON.stringify(json, 0, 8));
答案 0 :(得分:1)
您遇到的问题是findWhere
仅返回匹配的第一个值,而不是匹配值列表。
更好的选择可能是使用filter
函数。
for (var i = 0; i < json.length; i++) {
json[i].subItem = _.filter(json[i].subItem, function(subItem) {
return subItem.flag;
});
}
答案 1 :(得分:1)
可能是Arrray.forEach
和Array.filter
之前答案的变体(如果您允许使用它):
json.forEach(function(item) {
item.subItem = item.subItem.filter(function(subItem) {
return subItem.flag;
});
});