繁体   English   中英

使用 lodash 基于嵌套数组项过滤数据

[英]Filter data based on nested array item using lodash

我有以下数据无法过滤

 { "data": { "Viewer": { "CampaignGrids": { "edges": [ { "node": { "Name": "mega campaign", "Start_Date": "08/31/2020", "End_Date": "09/15/2020", "Promoted_Titles": [ { "Primary_ISBN": "4314323211", "Book": null }, { "Primary_ISBN": "94232344", "Book": null }, { "Primary_ISBN": "221235345", "Book": null } ] } }, { "node": { "Name": "InActiveBook Campaign", "Start_Date": "08/14/2019", "End_Date": "08/14/2019", "Promoted_Titles": [ { "Primary_ISBN": "9781504011815", "Book": { "Primary_ISBN": "9781504011815", "Active": true } }, { "Primary_ISBN": "9780795336874", "Book": { "Primary_ISBN": "9780795336874", "Active": true } }, { "Primary_ISBN": "9781453244517", "Book": { "Primary_ISBN": "9781453244517", "Active": true } }, { "Primary_ISBN": "9781781892527", "Book": { "Primary_ISBN": "9781781892527", "Active": false } } ] } } ] } } } }

我需要过滤所有包含 Active : False book 的广告系列

因此,根据上述数据,我需要重新关注

 {"node": { "Name": "InActiveBook Campaign", "Start_Date": "08/14/2019", "End_Date": "08/14/2019", "Promoted_Titles": [ { "Primary_ISBN": "9781504011815", "Book": { "Primary_ISBN": "9781504011815", "Active": true } }, { "Primary_ISBN": "9780795336874", "Book": { "Primary_ISBN": "9780795336874", "Active": true } }, { "Primary_ISBN": "9781453244517", "Book": { "Primary_ISBN": "9781453244517", "Active": true } }, { "Primary_ISBN": "9781781892527", "Book": { "Primary_ISBN": "9781781892527", "Active": false } } ] } }

目前我正在使用 lodash 库过滤器选项。 我尝试跟随但它返回给我两个数据而不是一个

 let flaged = _.filter(campaigns, function(item) { return _.filter(item.Promoted_Titles, function(o) { return o.Book.Active = false; }) }); console.log('flagged campaign ', JSON.stringify(flaged) , '\\n');

我也试过以下

 let flaged = filter(campaigns, function(el) { el.Promoted_Titles = filter(el.Promoted_Titles, function(item) { console.log('item is ', item); return 'Book.Active' == false }) return el; })

但在这两种情况下,我都得到了两个项目而不是一个。 提前致谢

你可以通过在回调对象中定义匹配的结构来使用 Lodash 做到这一点,如下所示:

 let d = {"data":{"Viewer":{"CampaignGrids":{"edges":[{"node":{"Name":"mega campaign","Start_Date":"08/31/2020","End_Date":"09/15/2020","Promoted_Titles":[{"Primary_ISBN":"4314323211","Book":null},{"Primary_ISBN":"94232344","Book":null},{"Primary_ISBN":"221235345","Book":null}]}},{"node":{"Name":"InActiveBook Campaign","Start_Date":"08/14/2019","End_Date":"08/14/2019","Promoted_Titles":[{"Primary_ISBN":"9781504011815","Book":{"Primary_ISBN":"9781504011815","Active":true}},{"Primary_ISBN":"9780795336874","Book":{"Primary_ISBN":"9780795336874","Active":true}},{"Primary_ISBN":"9781453244517","Book":{"Primary_ISBN":"9781453244517","Active":true}},{"Primary_ISBN":"9781781892527","Book":{"Primary_ISBN":"9781781892527","Active":false}}]}}]}}}} let e = d.data.Viewer.CampaignGrids.edges; let a = _.filter(e, { node: { Promoted_Titles: [{ Book: { Active: false } }] } }); console.log(a);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>

你有一个叫做edges的对象键,它是你的节点数组。

const results = edges.filter( edge => {
  return edge.node.Promoted_Titles.filter( promotedTitles => promotedTitles.Book.Active === false).length > 0)
});

这将返回包含至少 1 本非活动书籍的边列表。

编辑:我只是交换了它以显示边缘/活动列表,其中根据您的评论至少有 1 本书处于非活动状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM