过滤嵌套 JSON 下划线

filtering nested JSON underscore

这是 jsfiddle

https://jsfiddle.net/sal1681/2043fumn/

当我执行代码时,它 return 是市场 ATL 的一个子项,实际上它不应该 return 子项 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));

您遇到的问题是 findWhere 仅 returns 第一个 匹配的值,而不是匹配值的列表。

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

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

可能是上一个答案的变体 Arrray.forEachArray.filter(如果您被允许使用它):

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