Javascript 实例的数组比较:仅返回第二个数组的唯一元素 技术资料 2阵列 两者都包含一个类的实例 阵列可以具有不同的长度 该类有一个isSameAs()函数 问题:
如何比较这两个数组中的元素并只返回第二个数组中唯一的元素 背景 我想从网络上抓取单位,并有一个临时数组,然后将对照新的抓取单位进行检查。之后,临时数组成为刚爬网的平面数组。 因此,如果没有新单位,临时阵列也可以为空 我的方法 我首先检查,哪个数组更长。然后,我有一个嵌套的for循环,从较长的数组开始,用以对照较短的数组检查每个元素。然后我被困在想象所有可能的情况下,不知道如何标记这一点Javascript 实例的数组比较:仅返回第二个数组的唯一元素 技术资料 2阵列 两者都包含一个类的实例 阵列可以具有不同的长度 该类有一个isSameAs()函数 问题:,javascript,arrays,comparison,instance,Javascript,Arrays,Comparison,Instance,如何比较这两个数组中的元素并只返回第二个数组中唯一的元素 背景 我想从网络上抓取单位,并有一个临时数组,然后将对照新的抓取单位进行检查。之后,临时数组成为刚爬网的平面数组。 因此,如果没有新单位,临时阵列也可以为空 我的方法 我首先检查,哪个数组更长。然后,我有一个嵌套的for循环,从较长的数组开始,用以对照较短的数组检查每个元素。然后我被困在想象所有可能的情况下,不知道如何标记这一点 function getJustUniqueElementsFromArray2(array1, array2
function getJustUniqueElementsFromArray2(array1, array2){
let uniqueElements = [];
/* Checks which array is longer */
let longerArray;
let shorterArray;
if (array2.length >= array1.length) {
longerArray = array2;
shorterArray = array1;
} else {
longerArray = array1;
shorterArray = array2;
}
/* Nested for loop starting with longer array */
for (let longerElem of longerArray) {
for (let shorterElem of shorterArray) {
//????
if (!longerElem.isSameAs(shorterElem)) {
uniqueElements.push(shorterElem);
} else if (!shorterElem.isSameAs(longerElem)) {
uniqueElements.push(longerElem);
}
//????
}
}
return uniqueElements;
}
初始爬网
2.爬行
3.爬行
4.爬行
5.爬行
编辑
我忘了提到数组中的实例在技术上是不同的
tempFlats = [A1, B1, C1];
newFlats = [A2, B2, C2, D1, E1];
A1 == A2 // false
A1.isSameAs(A2) // true
解决方案
您可以选择一个过滤器并过滤阵列
函数getUnique(左、右){
var s=新设置(左);
返回right.filter(v=>!s.has(v));
}
var tempFlats=['A','B','C','D','E'],
新建公寓=['A','E','F'],
uniqueElements=getUnique(临时平面、新平面);
控制台日志(uniqueElements)代码>您可以选择一个数组并对其进行筛选
函数getUnique(左、右){
var s=新设置(左);
返回right.filter(v=>!s.has(v));
}
var tempFlats=['A','B','C','D','E'],
新建公寓=['A','E','F'],
uniqueElements=getUnique(临时平面、新平面);
控制台日志(uniqueElements)代码>更新
即使在这种情况下,您仍然可以使用简单的数组方法
函数getFlat(v){
返回{
瓦尔:v,
isSameAs:函数(o){
返回this.val==o.val
}
}
}
var array1=[getFlat(1)、getFlat(2)、getFlat(3)];
var array2=[getFlat(2)、getFlat(3)、getFlat(9)];
函数GetJustUniquelementsFromArray2(arr1、arr2){
返回arr2.filter(x=>arr1.filter(y=>y.isSameAs(x)).length==0);
}
log(getjustuniquelementsfromarray2(array1,array2))代码>更新
即使在这种情况下,您仍然可以使用简单的数组方法
函数getFlat(v){
返回{
瓦尔:v,
isSameAs:函数(o){
返回this.val==o.val
}
}
}
var array1=[getFlat(1)、getFlat(2)、getFlat(3)];
var array2=[getFlat(2)、getFlat(3)、getFlat(9)];
函数GetJustUniquelementsFromArray2(arr1、arr2){
返回arr2.filter(x=>arr1.filter(y=>y.isSameAs(x)).length==0);
}
log(getjustuniquelementsfromarray2(array1,array2))代码>谢谢你的帮助!在朋友的帮助下找到了解决办法。请看编辑后的帖子。谢谢你的帮助!在朋友的帮助下找到了解决办法。请看编辑后的帖子。谢谢你的帮助!在朋友的帮助下找到了解决办法。请看编辑后的帖子。谢谢你的帮助!在朋友的帮助下找到了解决办法。请看编辑后的帖子。
//now: tempFlats = [A, B, C];
newFlats = [A, B, C, D, E];
uniqueElements = [D, E];
tempFlats = newFlats;
//now: tempFlats = [A, B, C, D, E];
newFlats = [A, E, F];
uniqueElements = [F];
tempFlats = newFlats;
//now: tempFlats = [A, E, F];
newFlats = [A, B, G, H];
uniqueElements = [B, G, H];
tempFlats = newFlats;
//now: tempFlats = [A, B, G, H];
newFlats = [];
uniqueElements = [];
tempFlats = newFlats;
tempFlats = [A1, B1, C1];
newFlats = [A2, B2, C2, D1, E1];
A1 == A2 // false
A1.isSameAs(A2) // true
function getJustUniqueElementsFromArray2(array1, array2){
let uniqueElements = [];
/* Nested for loop starting with longer array */
for (let elem2 of array2) {
let found = false;
for (let elem1 of array1) {
if (elem2.isSameAs(elem1)) {
found = true;
}
}
if (!found) uniqueElements.push(elem2)
}
return uniqueElements;
}