为什么这个二维数组比较不起作用?
Why is this 2D array comparison not working?
所以,我得到了:
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"],
]
我正在尝试通过以下方式比较它们并从 array1
中保留唯一性,它应该 return:
resultingArray =
[
["Fisrt Name1", "Last Name1", "email@email.com"],
["Fisrt Name3", "Last Name2", "email3@email.com"]
]
...但它 return 一切。
尝试 1:
resultingArray = array1.filter(e => !array2.includes(e));
尝试 2:
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])
}
}
}
感谢您的帮助!
这是我重构代码后的最终编辑答案。
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);
这里我使用了标签。更多关于 labels.
您不能比较 2 个参考值(数组或对象)
也许像
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)
所以,我得到了:
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"],
]
我正在尝试通过以下方式比较它们并从 array1
中保留唯一性,它应该 return:
resultingArray =
[
["Fisrt Name1", "Last Name1", "email@email.com"],
["Fisrt Name3", "Last Name2", "email3@email.com"]
]
...但它 return 一切。
尝试 1:
resultingArray = array1.filter(e => !array2.includes(e));
尝试 2:
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])
}
}
}
感谢您的帮助!
这是我重构代码后的最终编辑答案。
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);
这里我使用了标签。更多关于 labels.
您不能比较 2 个参考值(数组或对象) 也许像
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)