我有以下 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/