大佬们,怎么用递归遍历来过滤掉paramName为空的的数据呢,想不出来了

[{
children:[{
childrenParamType: "String"
description: "333"
example: ""
expression: ""
id: 1-1
interBodyId: 1
maxLength: ""
minLength: ""
num: 1
paramName: ""
paramType: "Object"
parentId: -1
required: 0
sortNum: 0
}],
childrenParamType: "String"
description: "333"
example: ""
expression: ""
id: 1
interBodyId: 1
maxLength: ""
minLength: ""
num: 1
paramName: "4444"
paramType: "Object"
parentId: -1
required: 0
sortNum: 0
}
]

阅读 2k
3 个回答
function deepFilter(list, cb) {
    return list.reduce((res, v) => {
        // 如果当前不符合条件就不递归
        if(cb(v)) {
            if(Array.isArray(v.children)) v.children = deepFilter(v.children, cb)
            res.push(v);
        }
        return res;    
    }, [])
}

const result = deepFilter(arr, item => item.paramName)
function filter(arr) {
    var ret = [];
    for (var i = 0; i < arr.length; ++i) {
        if (arr[i].paramName) {
            var obj = arr[i];
            if (obj.children instanceof Array) {
                obj = {};
                for (var key in arr[i]) obj[key] = arr[i][key];
                obj.children = filter(obj.children);
            }
            ret.push(obj);
        }
    }
    return ret;
}
var arr = [
    {
        "children": [
            {
                "childrenParamType": "String",
                "description": "333",
                "example": "",
                "expression": "",
                "id": "1-1",
                "interBodyId": 1,
                "maxLength": "",
                "minLength": "",
                "num": 1,
                "paramName": "",
                "paramType": "Object",
                "parentId": -1,
                "required": 0,
                "sortNum": 0
            }
        ],
        "childrenParamType": "String",
        "description": "333",
        "example": "",
        "expression": "",
        "id": "1",
        "interBodyId": 1,
        "maxLength": "",
        "minLength": "",
        "num": 1,
        "paramName": "4444",
        "paramType": "Object",
        "parentId": -1,
        "required": 0,
        "sortNum": 0
    }
];
console.dir(filter(arr));
var arr = [
    {
        "children": [
            {
                "childrenParamType": "String",
                "description": "333",
                "example": "",
                "expression": "",
                "id": "1-1",
                "interBodyId": 1,
                "maxLength": "",
                "minLength": "",
                "num": 1,
                "paramName": "",
                "paramType": "Object",
                "parentId": -1,
                "required": 0,
                "sortNum": 0
            }
        ],
        "childrenParamType": "String",
        "description": "333",
        "example": "",
        "expression": "",
        "id": "1",
        "interBodyId": 1,
        "maxLength": "",
        "minLength": "",
        "num": 1,
        "paramName": "4444",
        "paramType": "Object",
        "parentId": -1,
        "required": 0,
        "sortNum": 0
    }
];
JSON.parse(JSON.stringify(arr).replaceAll('"paramName":"",', ''))

最简单粗暴的方法,不用什么递归

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题