过滤嵌套的JSON下划线

时间:2016-08-24 20:12:41

标签: jquery json underscore.js

这是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));

2 个答案:

答案 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.forEachArray.filter之前答案的变体(如果您允许使用它):

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