Compare 2 Arrays And Show Unmatched Elements From Array 1
Solution 1:
You could use filter
and Set
, providing the Set
as context to the filter
method, so it can be accessed as this
:
var check= ["044", "451"],
data = ["343", "333", "044", "123", "444", "555"];
var res = check.filter( function(n) { return !this.has(n) }, newSet(data) );
console.log(res);
Note that this runs in O(n) time, contrary to indexOf
/includes
based solutions, which really represent a nested loop.
Solution 2:
There is a lot of ways to achieve this, however I will keep your style of coding. Before nested loop set matches flag to false and set it to true in nested loop if match found, after nested loop check your flag if it is false then push element in missing array.
functiongetMissing(a, b) {
var missings = [];
var matches = false;
for ( var i = 0; i < a.length; i++ ) {
matches = false;
for ( var e = 0; e < b.length; e++ ) {
if ( a[i] === b[e] ) matches = true;
}
if(!matches) missings.push( a[i] );
}
return missings;
}
Solution 3:
You can use indexOf
and filter
for this:
check.filter((item) => {
return data.indexOf(item) === -1
})
Solution 4:
Edit
The .find()
method, as mentioned in a comment, only returns a single value satisfying the predicate function it is given. To correct this, simply substitute .find()
with the .filter()
function and it should work as intended. Thanks for the catch.
If you're familiar with ES6, you can use the purpose-built .find()
Array method; it is, afterall, provided for situations just like the one described. It takes a predicate function and returns the values from the array .find()
was called on (here, check
) that satisfy the predicate function argument. In my code, the predicate function simply checks for values that are not present in the data
array. .includes()
is likewise a product of the recent ES6 JavaScript specification and returns a Boolean.
var check= ["044", "451"],
data = ["343", "333", "044", "123", "444", "555"];
let notPresentInData = check.filter(val => !data.includes(val));
console.log(notPresentInData);
Post a Comment for "Compare 2 Arrays And Show Unmatched Elements From Array 1"