我想知道是否有Lodash的方法可以解决这个问题,否则我可以通过for
循环来解决。如果true
包含一个或多个嵌套对象与collection
相同的元素,我想返回c
。
下面的示例将返回true
,因为collection[1]
包含相同的c
。
针:
c = {
x: 11,
y: 22,
z: 33
}
干草堆:
collection = [
{
a: 1,
b: 1,
c: {
x: 10,
y: 20,
z: 30
},
d: 1
},
{
a: 1,
b: 1,
c: {
x: 11,
y: 22,
z: 33
},
d: 1
},
{
a: 1,
b: 1,
c: {
x: 12,
y: 24,
z: 36
},
d: 1
}
]
这与诸如How to do a deep comparison between 2 objects with lodash?之类的问题不同,因为我需要检查是否有任何收集项包含嵌套在其中的相同对象,而不是比较两个对象是否彼此相同。
预先感谢您的帮助。
答案 0 :(得分:1)
您可以在递归函数中使用_.isEqual
:
function find(h, n) {
if (_.isEqual(h, n)) return true;
let found;
if (Array.isArray(h)) {
for (let e of h) {
found = find(e, n);
if (found) return found;
}
} else if (h instanceof Object) {
return find(Object.values(h), n);
}
return false;
}
var c = {
x: 11,
y: 22,
z: 33
};
var d = {
x: 1111,
y: 2222,
z: 32223
};
var collection = [{
a: 1,
b: 1,
c: {
x: 10,
y: 20,
z: 30
},
d: 1
},
{
a: 1,
b: 1,
c: {
x: 11,
y: 22,
z: 33
},
d: 1
},
{
a: 1,
b: 1,
c: {
x: 12,
y: 24,
z: 36
},
d: 1
}
];
console.log(find(collection, c));
console.log(find(collection, d));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>