Reputation: 344
I'm trying to compare each object in the array.
Let's say below is my array:
var objects = [{
'x': 1,
'y': 2
}, {
'x': 2,
'y': 1
},{
'x': 3,
'y': 1
},{
'x': 4,
'y': 1
}];
Given two items, say item1
and item2
, I need to check the condition item1.x == item2.y
and item1.y == item2.x
through the array.
Is there a clean/efficient way to do in Lodash?
Upvotes: 0
Views: 97
Reputation: 135752
var objects = [
{'x': 1, 'y': 2},
{'x': 2, 'y': 1},
{'x': 3, 'y': 1},
{'x': 4, 'y': 1}
];
var comparedLodash = _.map(objects, function (item) {
return !!_.find(objects, {x: item.y, y: item.x});
});
console.log(comparedLodash);
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>
Complexity of this is O(n^2).
Note: You could make it O(nlogn) if you sorted the array before starting the comparison, but this would add significant noise to the code.
The _.map(somearray, somefunction)
function executes the somefunction
into every element of somearray
. We will use it to convert every item of the objects
array into a boolean. Roughly it is like:
var comparedLodash = _.map(objects, functionThatWillConvertAnItemIntoABoolean);
Now, each item1
should be converted true
if there's anotherItem
with item1.x == anotherItem.y
and item1.y == anotherItem.x
. To find if this another item exists, we use _.find()
.
_.find(somearray, someobject)
tries to if the someobject
exists in the somearray
. That is why we do, above, something like:
function (item) {
var anotherItem = {x: item.y, y: item.x}
return _.find(objects, anotherItem);
}
Lastly, _.find
returns the object, if found, and undefined
if not found. We use !!
to convert that to boolean (!!undefined
becomes false
and !!someobject
becomes true
).
Upvotes: 1
Reputation: 1436
You can use map. This may help,
objects.map((value, index) => {
return value.x == value.y
})
Upvotes: 0
Reputation: 2375
var newArray = _.map(objects, function(item) {
if (item.x == item.y) return item;
});
var filteredNewArray = _.without(newArray, undefined)
console.log(filteredNewArray)
Upvotes: 0