Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript FilrerDeep使用deepdash保持汇总结果_Javascript_Json_Reactjs_Lodash - Fatal编程技术网

Javascript FilrerDeep使用deepdash保持汇总结果

Javascript FilrerDeep使用deepdash保持汇总结果,javascript,json,reactjs,lodash,Javascript,Json,Reactjs,Lodash,我想使用filterDeep from(任何其他解决方案都可以)来过滤下面的数据,这样就可以完整地汇总判决 { "diff": [ { "actual": "parent1", "expected": "parent1", "match": true, "children": [

我想使用filterDeep from(任何其他解决方案都可以)来过滤下面的数据,这样就可以完整地汇总判决

{
"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的答案