Javascript-如果数组没有';不存在于另一个世界

Javascript-如果数组没有';不存在于另一个世界,javascript,arrays,loops,Javascript,Arrays,Loops,我有两个阵列: //list elements from html var list = document.querySelectorAll('#pres-list-ul li'); //list of retrieved objects from api var objects = self.retrievedItems; 为了提高效率,列表的内容保存在html文件中(除非刷新,否则无需重新呈现相同的数据) 如果检索到的对象中不再存在列表项,我想从html中删除该列表项 我知道它在下面代码的

我有两个阵列:

//list elements from html
var list = document.querySelectorAll('#pres-list-ul li');
//list of retrieved objects from api
var objects = self.retrievedItems;
为了提高效率,列表的内容保存在html文件中(除非刷新,否则无需重新呈现相同的数据)

如果检索到的对象中不再存在列表项,我想从html中删除该列表项

我知道它在下面代码的某个地方,但我无法计算出来

//I need to compare the id? For that another loop - which will run hundreds and thousands of time?
for(var j = 0; j < objects.length; j++) {
  if(objects.indexOf(list[i]) === -1) {
    //false
  } else {
    //true
  }
}
在列表中找到该额外值并将其删除

名单:

您可以使用并检查阵列是否匹配:

var array1=[1,2,3,4,5,6,7,8,9],
数组2=[1,2,3,4,5,6,7,8,9,10],
结果=[];
结果=阵列2.过滤器(功能(项目){
if(array1.indexOf(item)!==-1)返回item;
});

控制台日志(结果)也在过滤器内查找:

var list = [1,2,3,4,5,6,7,8,9];
var objects = [1,2,5,6,9,10,11,12,13,14];
var result = list.filter(item => objects.find(element => element === item));
console.log(result); //[ 1, 2, 5, 6, 9 ]

首先,您必须以某种方式对齐数据。我建议您删除这些项目的
id=“item-5756”
。改用
data id=“5756”
。在获得本地和远程的ID列表后,可以使用
indexOf
执行建议的操作,只需隐藏远程中不存在的本地元素

在这里查看:

请注意,有几种改进方法:

更好的过滤算法:我建议的方法效率很差。可以一次性对ID进行排序和筛选。使用
[data=“5678”]
进行查找也相当缓慢


<强>使用数据绑定< /强>:考虑使用角度或其他MVC框架使项目保持可维护性。通过这种方式,您可以只跟踪一个元素列表,并让angular计算重新渲染。

如果BaseArray是arr1,而receive from server是arr2,则必须在arr1上执行循环,如果在arr2中找不到,则不推送arrOut

var arr1=["abc","cde","efg","xyz"];
var arr2=["abc","cde","efg"];
var arrOut=[];
for(var i=0;i<arr1.length;i++){
    var out=arr2.find(function(element, index, array){return element===arr1[i];});
    if(out!=undefined){
        arrOut.push(out);
    }
}
var arr1=[“abc”、“cde”、“efg”、“xyz”];
var arr2=[“abc”、“cde”、“efg”];
var arrOut=[];

对于(var i=0;i您正在尝试查找两个列表的交集?每个列表中的项目是否唯一?能否同时发布
列表
对象的样本
。@MartinGottweis samples added.@Joe是的,它们是唯一的-没有重复项或虚假值。我想交集就是我要查找的!谢谢Martin。我用y来整理它我们的例子。我已经将这两个数据存储在一个数组中,所以不需要重新映射它们:)很乐意帮忙。祝你的项目好运。
0: {
  id: //
  title: //
  description //
  // ...
}

1: {
  //...
}
var list = [1,2,3,4,5,6,7,8,9];
var objects = [1,2,5,6,9,10,11,12,13,14];
var result = list.filter(item => objects.find(element => element === item));
console.log(result); //[ 1, 2, 5, 6, 9 ]
var remote_data = {
    5756: {
        id: 5756,
        title: '',
        description: '',
    },
    5757: {
        id: 5757,
        title: '',
        description: '',
    },
    5758: {
        id: 5758,
        title: '',
        description: '',
    },
}

$(document).on('click', '.filter', filter_local)

function filter_local () {
    var local_ids = $('#pres-list-ul li').toArray().map(function (element) { return $(element).data('id') })
    var remote_ids = []
    for (remote_index in remote_data) {
        remote_ids.push(remote_data[remote_index].id)
    }
    console.log(local_ids, remote_ids)

    for (local_id in local_ids) {
        if (remote_ids.indexOf(local_ids[local_id]) == -1) {
            $('#pres-list-ul li[data-id="' + local_ids[local_id] + '"]').hide()
        }
    }
}
var arr1=["abc","cde","efg","xyz"];
var arr2=["abc","cde","efg"];
var arrOut=[];
for(var i=0;i<arr1.length;i++){
    var out=arr2.find(function(element, index, array){return element===arr1[i];});
    if(out!=undefined){
        arrOut.push(out);
    }
}