(Lodash) Is there a method to check if an identical object exists (nested) in a collection?











up vote
0
down vote

favorite












I was wondering if there is a Lodash approach to this problem, which I would otherwise solve with a for loop. I would like to return true if collection contains one or more elements with nested object identical to c.



The below example would return true because collection[1] contains an identical c.



Needle:



c = {
x: 11,
y: 22,
z: 33
}


Haystack:



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
}
]


This is different from questions such as How to do a deep comparison between 2 objects with lodash? because I need to check if any of the collection items contain an identical object nested within them, not compare whether two objects are identical to each other.



Thanks in advance for your help.










share|improve this question
























  • Possible duplicate of How to do a deep comparison between 2 objects with lodash?
    – Get Off My Lawn
    Nov 22 at 17:37










  • Not really the same question, but for loop with _.isEqual is one way to go, unless there is a method that I have overlooked that does the iteration and comparison in one.
    – Rhecil Codes
    Nov 22 at 17:46












  • That's not a single method, but you could use_.uniq and then compare original size and new size, and if they are different, it had duplicates
    – iagowp
    Nov 22 at 17:49















up vote
0
down vote

favorite












I was wondering if there is a Lodash approach to this problem, which I would otherwise solve with a for loop. I would like to return true if collection contains one or more elements with nested object identical to c.



The below example would return true because collection[1] contains an identical c.



Needle:



c = {
x: 11,
y: 22,
z: 33
}


Haystack:



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
}
]


This is different from questions such as How to do a deep comparison between 2 objects with lodash? because I need to check if any of the collection items contain an identical object nested within them, not compare whether two objects are identical to each other.



Thanks in advance for your help.










share|improve this question
























  • Possible duplicate of How to do a deep comparison between 2 objects with lodash?
    – Get Off My Lawn
    Nov 22 at 17:37










  • Not really the same question, but for loop with _.isEqual is one way to go, unless there is a method that I have overlooked that does the iteration and comparison in one.
    – Rhecil Codes
    Nov 22 at 17:46












  • That's not a single method, but you could use_.uniq and then compare original size and new size, and if they are different, it had duplicates
    – iagowp
    Nov 22 at 17:49













up vote
0
down vote

favorite









up vote
0
down vote

favorite











I was wondering if there is a Lodash approach to this problem, which I would otherwise solve with a for loop. I would like to return true if collection contains one or more elements with nested object identical to c.



The below example would return true because collection[1] contains an identical c.



Needle:



c = {
x: 11,
y: 22,
z: 33
}


Haystack:



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
}
]


This is different from questions such as How to do a deep comparison between 2 objects with lodash? because I need to check if any of the collection items contain an identical object nested within them, not compare whether two objects are identical to each other.



Thanks in advance for your help.










share|improve this question















I was wondering if there is a Lodash approach to this problem, which I would otherwise solve with a for loop. I would like to return true if collection contains one or more elements with nested object identical to c.



The below example would return true because collection[1] contains an identical c.



Needle:



c = {
x: 11,
y: 22,
z: 33
}


Haystack:



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
}
]


This is different from questions such as How to do a deep comparison between 2 objects with lodash? because I need to check if any of the collection items contain an identical object nested within them, not compare whether two objects are identical to each other.



Thanks in advance for your help.







javascript match lodash






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 22 at 18:14

























asked Nov 22 at 17:33









Rhecil Codes

102113




102113












  • Possible duplicate of How to do a deep comparison between 2 objects with lodash?
    – Get Off My Lawn
    Nov 22 at 17:37










  • Not really the same question, but for loop with _.isEqual is one way to go, unless there is a method that I have overlooked that does the iteration and comparison in one.
    – Rhecil Codes
    Nov 22 at 17:46












  • That's not a single method, but you could use_.uniq and then compare original size and new size, and if they are different, it had duplicates
    – iagowp
    Nov 22 at 17:49


















  • Possible duplicate of How to do a deep comparison between 2 objects with lodash?
    – Get Off My Lawn
    Nov 22 at 17:37










  • Not really the same question, but for loop with _.isEqual is one way to go, unless there is a method that I have overlooked that does the iteration and comparison in one.
    – Rhecil Codes
    Nov 22 at 17:46












  • That's not a single method, but you could use_.uniq and then compare original size and new size, and if they are different, it had duplicates
    – iagowp
    Nov 22 at 17:49
















Possible duplicate of How to do a deep comparison between 2 objects with lodash?
– Get Off My Lawn
Nov 22 at 17:37




Possible duplicate of How to do a deep comparison between 2 objects with lodash?
– Get Off My Lawn
Nov 22 at 17:37












Not really the same question, but for loop with _.isEqual is one way to go, unless there is a method that I have overlooked that does the iteration and comparison in one.
– Rhecil Codes
Nov 22 at 17:46






Not really the same question, but for loop with _.isEqual is one way to go, unless there is a method that I have overlooked that does the iteration and comparison in one.
– Rhecil Codes
Nov 22 at 17:46














That's not a single method, but you could use_.uniq and then compare original size and new size, and if they are different, it had duplicates
– iagowp
Nov 22 at 17:49




That's not a single method, but you could use_.uniq and then compare original size and new size, and if they are different, it had duplicates
– iagowp
Nov 22 at 17:49












1 Answer
1






active

oldest

votes

















up vote
1
down vote



accepted










You can use _.isEqual in a recursive function:






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>








share|improve this answer



















  • 1




    This is nice and concise. Thank you.
    – Rhecil Codes
    Nov 22 at 20:58











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53435918%2flodash-is-there-a-method-to-check-if-an-identical-object-exists-nested-in-a%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes








up vote
1
down vote



accepted










You can use _.isEqual in a recursive function:






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>








share|improve this answer



















  • 1




    This is nice and concise. Thank you.
    – Rhecil Codes
    Nov 22 at 20:58















up vote
1
down vote



accepted










You can use _.isEqual in a recursive function:






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>








share|improve this answer



















  • 1




    This is nice and concise. Thank you.
    – Rhecil Codes
    Nov 22 at 20:58













up vote
1
down vote



accepted







up vote
1
down vote



accepted






You can use _.isEqual in a recursive function:






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>








share|improve this answer














You can use _.isEqual in a recursive function:






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>








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>





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>






share|improve this answer














share|improve this answer



share|improve this answer








edited Nov 22 at 18:05

























answered Nov 22 at 18:00









slider

7,8751129




7,8751129








  • 1




    This is nice and concise. Thank you.
    – Rhecil Codes
    Nov 22 at 20:58














  • 1




    This is nice and concise. Thank you.
    – Rhecil Codes
    Nov 22 at 20:58








1




1




This is nice and concise. Thank you.
– Rhecil Codes
Nov 22 at 20:58




This is nice and concise. Thank you.
– Rhecil Codes
Nov 22 at 20:58


















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53435918%2flodash-is-there-a-method-to-check-if-an-identical-object-exists-nested-in-a%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

What visual should I use to simply compare current year value vs last year in Power BI desktop

Alexandru Averescu

Trompette piccolo