Javascript 如果匹配项返回这些值,如何比较两个json对象?
我有两个json数据对象,如下所示:Javascript 如果匹配项返回这些值,如何比较两个json对象?,javascript,node.js,Javascript,Node.js,我有两个json数据对象,如下所示: const currentUser = {"subAccount":{"setup":true, "edit": true, "delete": true}}; const parentUser = {"subAccount":{"setup":true, "edit": true}, "game":
const currentUser = {"subAccount":{"setup":true, "edit": true, "delete": true}};
const parentUser = {"subAccount":{"setup":true, "edit": true}, "game": {"edit"}};
我想比较两个json数据中的对象是否匹配
预期数据:
{
"subAccount": {
"setup": true,
"edit": true
}
}
请先帮我一个忙,谢谢。我将写一个这样的递归函数
function compare(current, parent) {
let result = {};
for (let key of Object.keys(parent)) {
if (parent[key] != undefined) {
if (typeof current[key] == "object") {
result[key] = compare(current[key], parent[key]);
}
else {
if (current[key] == parent[key]) {
result[key] = current[key];
}
}
}
}
return result;
}
const main=()=>{
const currentUser={
子账户:{
设置:对,
编辑:对,
删除:真
},
};
常量parentUser={
子账户:{
设置:对,
编辑:对,
},
游戏:{
编辑:真
}
}
const result=compareTwoObj(当前用户、父用户);
//打印结果;
log('result==>',JSON.stringify(result));
}
常量compareTwoObj=(obj1,obj2)=>{
常量公共={};
for(对象的常量键。键(obj2)){
如果(obj2[键]!==未定义){
if(obj1的类型[键]=“对象”){
公共[key]=比较对象对象bj(obj1[key],obj2[key]);
}
否则{
如果(obj1[键]==obj2[键]){
公共[键]=obj1[键];
}
}
}
}
返回普通;
}
main()代码>嘿,你的两个对象是否总是具有相同的嵌套级别?如果是,那么您可以迭代对象键并使用reduce函数创建新对象。是某些数据结构的文本表示形式,通常是对象或数组。currentUser
和parentUser
都是JavaScript对象,仅此而已。它们不需要在属性名周围加引号(当属性名不符合JS变量名的规则时,需要加引号)。在属性名周围添加引号并不能使其成为JSON。谢谢@aditya81070。“不,不是,先生。”ChantySok如果对象具有任意深度,那么我建议编写一个递归函数,将一个对象级别与第二个对象的每个级别进行比较。例如{a:'b',c:{d:'f'}
和{a:{e:{d:'f'}
,将把a
与深嵌套对象进行比较。@aditya81070能帮我一下吗?谢谢你的回答。它很好。但是,当我将它添加到我的代码中时。它显示错误eslint,消息为no restricted syntax iterators/Generators可能是因为ForOfStatement而给你一个错误,所以你可以从ForOfStatement更改为ForLoop陈述