javascript - 需要一个操作对象并给出所需响应的通用函数

标签 javascript node.js lodash

我有以下 JSON 对象:

{
    "$and": [{
        "fname": "test"
    }, {
        "lname": "test1"
    }, {
        "$or": [{
            "age": 20
        }, {
            "address": "mumbai"
        }, {
            "$and": [{
                "fav": "java"
            }, {
                "price": 200
            }]
        }]
    }, {
        "java": "servlet"
    }, {
        "$and": [{
            "colour": "green"
        }, {
            "pin": 400
        }]
    }]
}

我想要一个 javascript 函数,将其转换为以下格式:

{
    "must": [{
        "fname": "test"
    }, {
        "lname": "test1"
    }, {
        "should": [{
            "age": 20
        }, {
            "address": "mumbai"
        }, {
            "must": [{
                "fav": "java"
            }, {
                "price": 200
            }]
        }]
    }, {
        "java": "servlet"
    }, {
        "must": [{
            "colour": "green"
        }, {
            "pin": 400
        }]
    }]
}

嵌套数组没有限制。因此需要一个通用函数来循环输入 JSON 对象并给出我想要的响应 请帮我解决这个问题?

最佳答案

为此你需要递归。这应该可以满足您的需要。

function findAndReplace(obj, find, replace){
  if(Array.isArray(obj)){
    obj.forEach((_obj) => findAndReplace(_obj, find, replace));  
  }else if(typeof(obj) === 'object'){
    for(var key in obj){
      findAndReplace(obj[key], find, replace);
      if(key === find){
        let temp = obj[key];
        obj[replace] = temp;
        delete obj[key];
      }      
    }
  }
}

let test = {
    "$and": [{
        "fname": "test"
    }, {
        "lname": "test1"
    }, {
        "$or": [{
            "age": 20
        }, {
            "address": "mumbai"
        }, {
            "$and": [{
                "fav": "java"
            }, {
                "price": 200
            }]
        }]
    }, {
        "java": "servlet"
    }, {
        "$and": [{
            "colour": "green"
        }, {
            "pin": 400
        }]
    }]
};
findAndReplace(test, "$and", "must");
findAndReplace(test, "$or", "should")
console.log(test);

关于javascript - 需要一个操作对象并给出所需响应的通用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52611476/

相关文章:

javascript - ajax加载后重新初始化Vuejs2

javascript - 如何更改 javascript [客户端] 中不同阶段的端点?

javascript - 如何使用 YouTube 视频启动和关闭 jQuery Twitter Bootstrap Modal?

javascript - 从Mongo查询返回的数据的错误处理

javascript - 在 Javascript 中比较两个无序对象数组的自定义实现

javascript - 如何使用 LoDash/Underscore 将所有零值移动到数组的末尾?

javascript - 当我的 iframe 加载时,会出现两个滚动条,如果我将 iframe 的滚动设置为 no,它将不会显示网站的完整内容

node.js - Sequelize Tables 不相关的问题

node.js - 如何使用 Bunyan 将日志保存到特定文件中?

javascript - 多次出现的数组值