如果其他数组中存在值,则JavaScript会从数组中删除对象

时间:2016-08-27 03:12:55

标签: javascript arrays firebase

我正在使用Firebase,所以如果有一种更有效的方法来构建这些数据,以便只能查询登录用户尚未查看的卡片,我愿意将该路线作为好。现在我正试图在事后进行过滤。

我的应用程序中包含所有卡片的数组,如下所示:

enter image description here

我有第二个数组,其中包含用户已经看过的所有卡片的信息。我希望能够查看两个数组,如果数组2中的cid与数组1中的$ id匹配,则完全从数组1中删除该对象。

enter image description here

3 个答案:

答案 0 :(得分:2)

这实际上很容易以功能性方式完成:

array1 = array1.filter(item => array2.every(item2 => item2.cid != item.$id));

Array.prototype.filter()作为数组返回数组的元素,这些元素会导致提供的函数返回true。我们的过滤器评估器说'如果array2中没有项目的CID与此项目的ID匹配,则返回true。“

由于filter()正在返回一个新数组,因此无需使用splice();我们可以将array1重新分配给新过滤的数组。

答案 1 :(得分:2)

循环遍历数组并使用splice删除元素

for(var i =0; i< array2.length; i++ ) {
   for(var j= 0; j< array1.length;j++) {
     if (array2[i].$id === array1[j].$id) {
      array1.splice(j,1);
      break;
    }
  }

答案 2 :(得分:0)

为什么不使用一个对象数组呢?为该

保留一个对象键
  

看到

默认情况下,看到为false。并使用firebase-query所看到的列为假。

或者您可以在获取代码中的数据后执行类似的操作。

var resultarray = [];

for(var i =0; i< array1.length; i++ ) {
   var flag = true;
   for(var j= 0; j< array2.length;j++) {
     if (array1[1].$id === array2[2].$id) {
       flag = false;
       break;
    }
  }
  if(flag === true) {
    resultarray.push(array1[i]);
  }
}