Javascript 比较json对象数组中的值

Javascript 比较json对象数组中的值,javascript,javascript-objects,Javascript,Javascript Objects,我有一个json数组1,如下所示: [ { id:0, name:"adam", uName: "aSilver", uId: "123", table: "table1"}, { id:1, name:"john", uName: "jBerlin", uId: "456", table: "table1"} ] 我还有另一个json array2,如下所示: [ { id:0, name:"adam", uName: "aSilver, jBerlin", uId: "123, 45

我有一个json数组1,如下所示:

[
 { id:0, name:"adam", uName: "aSilver", uId: "123", table: "table1"},
 { id:1, name:"john", uName: "jBerlin", uId: "456", table: "table1"}
]
我还有另一个json array2,如下所示:

[
 { id:0, name:"adam", uName: "aSilver, jBerlin", uId: "123, 456", createdBy: 
"auto", createdOn: "09/10/2018", desc: "none", table: "table1"},
 { id:1, name:"john", uName: "aSilver, jBerlin", uId: "123, 456", createdBy: 
"auto", createdOn: "09/10/2018", desc: "none1", table: "table1"},
 { id:0, name:"steve" uName: "aSilver, jBerlin, pParis", uId: "123, 456, 
 789", createdBy: "auto", createdOn: "09/10/2018", desc: "none2", table: 
"table2"},
 { id:0, name:"nash", uName: "aSilver, jBerlin, pParis", uId: "123, 456, 
 789", createdBy: "auto", createdOn: "09/10/2018", desc: "none3", table: 
"table2"},
 { id:0, name:"sand", uName: "aSilver", uId: "123", createdBy: "auto", 
createdOn: "09/10/2018", desc: "none4", table: "table3"}
]
我必须检查array1中的uname+uid组合是否存在于array2中

详情如下:

从array2开始,首先我必须得到唯一的值。唯一值基于“表”键。结果如下:

[
 { id:0, name:"adam", uName: "aSilver, jBerlin", uId: "123, 456", createdBy: 
"auto", createdOn: "09/10/2018", desc: "none", table: "table1"},
 { id:0, name:"steve" uName: "aSilver, jBerlin, pParis", uId: "123, 456, 
789", createdBy: "auto", createdOn: "09/10/2018", desc: "none2", table: 
"table2"},
 { id:0, name:"sand", uName: "aSilver", uId: "123", createdBy: "auto", 
createdOn: "09/10/2018", desc: "none4", table: "table3"}
]
现在我可以循环上面的数组创建新的json数组3,如下所示:

[
 { comparer: "aSilver_123, jBerlin_456", table: "table1" }
 { comparer: "aSilver_456, jBerlin_456, pParis_789", table: "table 2" }
 { comparer: "aSilver_123", table: "table 3" }
]
现在我只需要比较array1和array3比较器键

因为阵列1有“aSilver_123,jBerlin_456”,这与阵列3的第一项类似。我现在抛出一个错误,即“table1”有重复的值

现在,我发现下面的方法可以检查唯一性,但我必须在对象数组中找到唯一性,所以这不起作用

     Array.prototype.unique = function () {
        var r = new Array();
        o: for (var i = 0, n = this.length; i < n; i++) {
            for (var x = 0, y = r.length; x < y; x++) {
                if (r[x] == this[i]) {                       
                    return false;
                }
            }
            r[r.length] = this[i];
        }
        return true;
    }
Array.prototype.unique=函数(){
var r=新数组();
o:for(var i=0,n=this.length;i
对不起,我知道这是一个不寻常的比较,我正在寻找

想知道解决这个问题的有效方法是什么

谢谢

这是我的
jsfiddle


创建一个对象,其键是
数组2的
属性。由于对象关键点是唯一的,因此这将获得唯一的对象

obj = {};
array2.forEach(o => obj[o.table] = o);
unique_array2 = Object.keys(obj).map(k => obj[k]);
要查找
array1
unique\u array2
的公共元素,只需使用比较属性的嵌套循环即可

matches = [];
array1.forEach(o1 => unique_array2.forEach(o2 => {
    if (o1.uName == o2.uName && o1.uid == o2.uid) {
        matches.push(o1);
    }
}));

上面的代码运行良好,并从Array2中为我提供了唯一的值。现在我该如何与我的阵列1进行比较。在代码中,unique_array2以obj的形式返回me数组。我已经为您创建了一个JSFIDLE:请使用而不是JSFIDLE。我已经修改了上面的内容以适合我的使用,并且效果很好。最后一个问题,在唯一数组中,它现在有3行用于表1、表2、表3。我怎样才能添加额外的条件,以便过滤掉表1,只显示表2、表3。我可以像result=unique_array2.filter(data=>data.table!='table1');但是我想知道是否可以在您共享的现有代码中添加此条件。在
forEach
函数中放置
if
语句
array2.forEach(o=>{if(o.table!='table1'){obj[o.table]=o;}}})
工作正常。谢谢你的时间。这些都不是JSON