2016-08-24 59 views
-1

这是的jsfiddle过滤嵌套的JSON强调

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)); 
+1

有一个项目是真正的'Atl' –

+0

我刚换它为假 – user1005310

+0

这里是更新的小提琴https://jsfiddle.net/sal1681/2043fumn/ – user1005310

回答

1

您遇到的问题是,findWhere只返回匹配,不匹配值的列表中第一值。

更好的选择可能是使用filter函数。

for (var i = 0; i < json.length; i++) { 
    json[i].subItem = _.filter(json[i].subItem, function(subItem) { 
    return subItem.flag; 
    }); 
} 
1

也许以前的答案与Arrray.forEachArray.filter的变体(如果你被允许使用它):

json.forEach(function(item) { 
    item.subItem = item.subItem.filter(function(subItem) { 
    return subItem.flag; 
    }); 
});