我有两个对象:
const have = {
a: true,
b: {
c: true,
d: true
}
};
const need = {
a: false,
b: {
c: true,
d: false
}
};
我需要在“需要”对象中查找是否至少有一个正匹配(真)与“有”对象。在这种情况下,它们在 b.c 中匹配,因为两者都是真的。
我应该如何面对这个问题?也许首先解析为一个数组?循环对象?
更新:
“需要”对象并不总是包含所有相同的键。它可能更少,但没有什么不同。
例子:
const need = {
b: {
c: true,
}
};
最佳答案
如果键和对象结构始终匹配,您可以对键/值进行递归检查:
const have = {
a: true,
b: {
c: true,
d: true
}
};
const need = {
a: false,
b: {
c: true,
d: false
}
};
function objectsHaveMatch(obj1, obj2) {
return Object.entries(obj1).some(([key, obj1Val]) => {
if (!obj2[key]) return false;
if (typeof obj1Val !== 'boolean') return objectsHaveMatch(obj1Val, obj2[key]);
return obj1Val === true && obj2[key] === true;
});
}
const atLeastOneMatch = objectsHaveMatch(have, need);
console.log(atLeastOneMatch);
也适用于更复杂的结构:
const have = {
a: true,
b: {
c: false,
d: true,
foo: {
q: false,
w: false,
e: false,
r: {
t: true
}
}
}
};
const need = {
a: false,
b: {
c: true,
d: false,
foo: {
q: true,
w: true,
e: true,
r: {
t: false
}
}
}
};
function objectsHaveMatch(obj1, obj2) {
return Object.entries(obj1).some(([key, obj1Val]) => {
if (!obj2[key]) return false;
if (typeof obj1Val !== 'boolean') return objectsHaveMatch(obj1Val, obj2[key]);
return obj1Val === true && obj2[key] === true;
});
}
const atLeastOneMatch = objectsHaveMatch(have, need);
console.log(atLeastOneMatch);
缺少属性的片段示例:
const have = {
a: true,
b: {
c: true,
d: true,
foo: {
q: false,
w: false,
e: false,
r: {
t: true
}
}
}
};
const need = {
b: {
c: true,
}
};
function objectsHaveMatch(obj1, obj2) {
return Object.entries(obj1).some(([key, obj1Val]) => {
if (!obj2[key]) return false;
if (typeof obj1Val !== 'boolean') return objectsHaveMatch(obj1Val, obj2[key]);
return obj1Val === true && obj2[key] === true;
});
}
const atLeastOneMatch = objectsHaveMatch(have, need);
console.log(atLeastOneMatch);
关于javascript - 在单独的对象中查找匹配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50243826/