Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 实例的数组比较:仅返回第二个数组的唯一元素 技术资料 2阵列 两者都包含一个类的实例 阵列可以具有不同的长度 该类有一个isSameAs()函数 问题:_Javascript_Arrays_Comparison_Instance - Fatal编程技术网

Javascript 实例的数组比较:仅返回第二个数组的唯一元素 技术资料 2阵列 两者都包含一个类的实例 阵列可以具有不同的长度 该类有一个isSameAs()函数 问题:

Javascript 实例的数组比较:仅返回第二个数组的唯一元素 技术资料 2阵列 两者都包含一个类的实例 阵列可以具有不同的长度 该类有一个isSameAs()函数 问题:,javascript,arrays,comparison,instance,Javascript,Arrays,Comparison,Instance,如何比较这两个数组中的元素并只返回第二个数组中唯一的元素 背景 我想从网络上抓取单位,并有一个临时数组,然后将对照新的抓取单位进行检查。之后,临时数组成为刚爬网的平面数组。 因此,如果没有新单位,临时阵列也可以为空 我的方法 我首先检查,哪个数组更长。然后,我有一个嵌套的for循环,从较长的数组开始,用以对照较短的数组检查每个元素。然后我被困在想象所有可能的情况下,不知道如何标记这一点 function getJustUniqueElementsFromArray2(array1, array2

如何比较这两个数组中的元素并只返回第二个数组中唯一的元素

背景 我想从网络上抓取单位,并有一个临时数组,然后将对照新的抓取单位进行检查。之后,临时数组成为刚爬网的平面数组。 因此,如果没有新单位,临时阵列也可以为空

我的方法 我首先检查,哪个数组更长。然后,我有一个嵌套的for循环,从较长的数组开始,用以对照较短的数组检查每个元素。然后我被困在想象所有可能的情况下,不知道如何标记这一点

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;

}