So, I got:
array1 =
[
["Fisrt Name1", "Last Name1", "email@email.com"],
["Fisrt Name2", "Last Name2", "email2@email.com"],
["Fisrt Name3", "Last Name2", "email3@email.com"]
]
array2 =
[
["email2@email.com"],
["email3@email.com"],
]
I'm trying to compare them and keep uniques from array1 in the following ways and it should return:
resultingArray =
[
["Fisrt Name1", "Last Name1", "email@email.com"],
["Fisrt Name3", "Last Name2", "email3@email.com"]
]
...but it's returning everything.
Attemp1:
resultingArray = array1.filter(e => !array2.includes(e));
Attemp2:
let resultingArray = [];
for (let a = 0; a < array1.length; a++){
for (let n= 0; n < array2.length; n++){
if(array1[a][2].indexOf(array2[n][0]) === -1){
resultingArray.push(array1[a])
}
}
}
Thanks for helping!
Here's my final edited answer after refactoring the code.
array1 = [
['Fisrt Name1', 'Last Name1', 'email@email.com'],
['Fisrt Name2', 'Last Name2', 'email2@email.com'],
['Fisrt Name3', 'Last Name3', 'email3@email.com'],
['Fisrt Name4', 'Last Name4', 'email4@email.com'],
];
array2 = [['email2@email.com'], ['email3@email.com']];
let resultingArray = [];
first: for (let a = 0; a < array1.length; a++) {
second: for (let n = 0; n < array2.length; n++) {
if (array1[a][2] === array2[n][0]) {
continue first;
}
}
resultingArray.push(array1[a]);
}
console.log(resultingArray);
Here I've used labels. More about labels.
You can not compare 2 reference values ( array or object) Maybe something like
array1 = [
['Fisrt Name1', 'Last Name1', 'email@email.com'],
['Fisrt Name2', 'Last Name2', 'email2@email.com'],
['Fisrt Name3', 'Last Name3', 'email3@email.com'],
['Fisrt Name4', 'Last Name4', 'email4@email.com'],
];
array2 = [['email2@email.com'], ['email3@email.com']];
const result = array2.map(item => array1.filter(e => !e.includes(item[0])))
console.log(result)