Javascript FilrerDeep使用deepdash保持汇总结果
我想使用filterDeep from(任何其他解决方案都可以)来过滤下面的数据,这样就可以完整地汇总判决Javascript FilrerDeep使用deepdash保持汇总结果,javascript,json,reactjs,lodash,Javascript,Json,Reactjs,Lodash,我想使用filterDeep from(任何其他解决方案都可以)来过滤下面的数据,这样就可以完整地汇总判决 { "diff": [ { "actual": "parent1", "expected": "parent1", "match": true, "children": [
{
"diff": [
{
"actual": "parent1",
"expected": "parent1",
"match": true,
"children": [
{
"actual": "child1",
"expected": "child1",
"match": true,
"children": [
{
"actual": "grandchild1",
"expected": "grandchild1_NOT",
"match": true
}
]
},
{
"actual": "child2",
"expected": "child2",
"match": true,
"children": [
{
"actual": "C2_grandchild1",
"expected": "C2_grandchild1",
"match": true
},
{
"actual": "C2_grandchild2",
"expected": "C2_grandchild2_NOT",
"match": false
}
]
}
]
}
]
}
json的简单视图如下所示:
我希望以这样的方式过滤掉,因为C2\u孙子2失败(匹配:false),json应该包含parent1-->child2-->C2孙子。我试图通过显示其父层次结构来突出失败。因此,child1、孙子1和C2_孙子1也不存在于过滤后的json中
我试过这个例子,但似乎不能很好地理解它能够实现这一点
PS:json在大多数情况下都非常大和深刻。您可以使用递归函数,它根据以下原则将节点数组映射到过滤数组:
- 如果节点有子节点,并且递归调用返回一个非空数组,则向结果中添加一个新节点,该节点具有减少的子节点数组
- 如果节点没有子节点,或者递归调用返回空数组,则:
- 如果节点有
,则按原样将此节点添加到结果中匹配:false
- 否则,不要将此节点添加到结果中
- 如果节点有
- 返回结果数组
函数过滤器(节点){
返回(节点| |[])。映射(节点=>{
设{children,…childlessNode}=node;
children=过滤器(children);
返回childrence.length?{…节点,children}
:!node.match&&childlessNode;
}).过滤器(布尔值);
}
//演示
让数据={“diff”:[{“actual”:“parent1”,“expected”:“parent1”,“match”:“true”,“child1”,“expected”:“child1”,“match”:“true”,“child1”,“child1”,“match”:“gender1”,“expected”:[{“actual”:“gender1”,“match”:“child2”,“expected”:“child2”,“match”:“true”,“children“C2_孙子1”,“匹配”:true},{“实际”:“C2_孙子2”,“预期”:“C2_孙子2_NOT”,“匹配”:false}]};
让结果={diff:filter(data.diff)};
console.log(result);
使用deepdash,您将获得如下内容:
//数据是您的json
常量失败=uu.filterDeep(data.diff,(v)=>!v.match{
儿童路径:“儿童”
});
(v)=>!v.match
——这是筛选条件
{childrenPath:'children'}
--声明子属性名称的选项,使deepdash在“树模式”下工作
lmk如果有任何问题谢谢。我很好用。因为我来自核心java世界。我需要做更复杂的装修,如果你能多解释一点就好了,如果可以的话,或者我会试着运行很多次并找出答案。但是谢谢a lotI添加了一些解释。非常感谢。非常感谢。很抱歉回来关于这一点。再多一点帮助。如果我使“Child1”的匹配:false,那么它应该删除孙子1,并且应该只显示parent->Child1,它不应该显示孙子1,因为它有“匹配:true”谢谢,效果很好。对于以后的使用会很有用。我已经使用了@trincot的答案