Reputation: 117
I am trying to compare 2 arrays where first array response is following:
response= [
{
organization: {
id: '75f1e2e1-83eb-484e-bdaf-1da9b57c635d'
},
{
organization: {
id: '810d0465-2917-4d67-802a-69cda41647ad'
}
]
second array
expectedResponse=
[
{
organization: {
id: '810d0465-2917-4d67-802a-69cda41647ad'
},
organization: {
id: '75f1e2e1-83eb-484e-bdaf-1da9b57c635d'
}
]
The function I wrote to compare 2 arrays for assertion is following
response.body.forEach(function (index) {
expect(response.body[index].organization.id).to.eql(
expectedResponse[index].organization.id
);
But it is failing with AssertionError: expected '75f1e2e1-83eb-484e-bdaf-1da9b57c635d' to deeply equal '810d0465-2917-4d67-802a-69cda41647ad'
As the order is different in each arrays for org id's. How can i compare if the order is different to make this assertion pass
Upvotes: 0
Views: 120
Reputation: 1074238
As you've said, since the order is different, you can't do this with a single pass.
You have at least a couple of options, each of which you'd do after checking that the arrays have the same length (since if they don't, they aren't a match for one another):
Sort the arrays (copying them first if sorting the originals isn't okay) and then use what you have to compare the results, since then they'll be in the same order.
Look for matches in an order-independent fashion, such as:
findIndex
or find
to see that array B has each of its valuesSet
of the id
values from array A, and then looping through array B making sure they're all in the set(Again, in both cases you start by ensuring they have the same length.)
You'll probably also want to ensure that the id
values are unique.
Upvotes: 2