(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.
javascript match lodash
add a comment |
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.
javascript match lodash
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, butfor
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
add a comment |
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.
javascript match lodash
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
javascript match lodash
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, butfor
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
add a comment |
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, butfor
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
add a comment |
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>
1
This is nice and concise. Thank you.
– Rhecil Codes
Nov 22 at 20:58
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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>
1
This is nice and concise. Thank you.
– Rhecil Codes
Nov 22 at 20:58
add a comment |
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>
1
This is nice and concise. Thank you.
– Rhecil Codes
Nov 22 at 20:58
add a comment |
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>
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>
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
add a comment |
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
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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