我正在使用Firebase,所以如果有一种更有效的方法来构建这些数据,以便只能查询登录用户尚未查看的卡片,我愿意将该路线作为好。现在我正试图在事后进行过滤。
我的应用程序中包含所有卡片的数组,如下所示:
我有第二个数组,其中包含用户已经看过的所有卡片的信息。我希望能够查看两个数组,如果数组2中的cid与数组1中的$ id匹配,则完全从数组1中删除该对象。
答案 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]);
}
}