我有 2 个数组:
var yin = [{"_id": "11111", "name": "blue"}];
var yang = [{"_id": "11111", "name": "blue"}, {"_id": "22222", "name": "red"}];
我尝试像这样过滤掉以下内容:
var yang = yang.filter(function(e){ return this.indexOf(e) < 0; }, yin);
由于某种原因,indexOf(e)
正在返回-1
我知道这是完全相同的数据。我唯一能想到的是下面有一些关系(可能不是正确的术语)数据,这使得它们看起来不一样,因为对象来自完全不同的数据库来源。
是否有另一种方法可以从来自不同来源的对象数组中过滤出相同的数据?
我知道这个过滤功能有效,因为如果我使用 .push()
推送数据它会很好地过滤掉。
最佳答案
问题是,按照您的意思,两个不同的对象永远不会相等。您需要对对象进行深入比较(手动),或者如果它适合您的需要,您可以检查是否有相同的 _id
属性。
var yin = [{"_id": "11111", "name": "blue"}];
var yang = [{"_id": "11111", "name": "blue"}, {"_id": "22222", "name": "red"}];
yang = yang.filter(function(e){
return this.findIndex(function(y){return y._id === e._id}) < 0; }, yin);
console.log(yang);
关于javascript - .filter() 来自不同来源的相同数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50645384/