如何应用过滤器以使用 AngularJS 获取 JSON 数组中 JSON 对象中具有相同值的元素

How to apply filter to get elements which have same value in JSONobjects inside JSON array using AngularJS

我有一个包含多个(动态)JSON 对象的 JSON 数组。我需要比较对象并选择在所有对象中具有相同值的键。我的 JSON 看起来像,

[
    {
        "CreateAccountName":"Joseph",
        "CreateDateTime":"0001-01-01T00:00:00",
        "Description":"Utilization of services",
        "Type":2,
        "Id":1000000001,
        "Count":1,
        "ModifiedAccountName":"",
        "ModifiedDateTime":"2016-10-04T10:16:40.5190025",
        "Name":"Utilization of services",
        "CardCount":0,
        "Target":95,
        "UniversalId":"SDFOPIJ-SDFGLKJ-ER234-234LF",
        "AccountId":0,
        "AccountName":"Joseph"
    },

    {
        "CreateAccountName":"Joseph",
        "CreateDateTime":"0001-01-01T00:00:00",
        "Description":"Utilization of Food",
        "Type":2,
        "Id":1000000001,
        "Count":1,
        "ModifiedAccountName":"",
        "ModifiedDateTime":"2016-10-04T10:16:40.5190025",
        "Name":"Utilization of Food",
        "CardCount":0,
        "Target":95,
        "UniversalId":"SDFOPIJ-SDFGLKJ-ER234-234LF",
        "AccountId":0,
        "AccountName":"Joseph"
    },

    {
        "CreateAccountName":"Joseph",
        "CreateDateTime":"0001-01-01T00:00:00",
        "Description":"Utilization of services",
        "Type":2,
        "Id":1000000001,
        "Count":1,
        "ModifiedAccountName":"",
        "ModifiedDateTime":"2016-10-04T10:16:40.5190025",
        "Name":"Utilization of services",
        "CardCount":0,
        "Target":95,
        "UniversalId":"SDFOPIJ-SDFGLKJ-ER234-234LF",
        "AccountId":0,
        "AccountName":"Joseph"
    }
]

我想获取具有相同值的密钥。例如,CreateAccountName。它在所有对象中具有相同的值。

棘手的情况是,密钥本身是动态的。我无法对密钥进行硬编码并进行比较。密钥名称可能会更改,或者可能会出现另一组密钥。我正在寻找一种通用解决方案来比较和获取对象的 "intersection"。

您只需使用 Array.reduce()

即可

var json = [
    {
        "CreateAccountName":"Joseph",
        "CreateDateTime":"0001-01-01T00:00:00",
        "Description":"Utilization of services",
        "Type":2,
        "Id":1000000001,
        "Count":1,
        "ModifiedAccountName":"",
        "ModifiedDateTime":"2016-10-04T10:16:40.5190025",
        "Name":"Utilization of services",
        "CardCount":0,
        "Target":95,
        "UniversalId":"SDFOPIJ-SDFGLKJ-ER234-234LF",
        "AccountId":0,
        "AccountName":"Joseph"
    },

    {
        "CreateAccountName":"Joseph",
        "CreateDateTime":"0001-01-01T00:00:00",
        "Description":"Utilization of Food",
        "Type":2,
        "Id":1000000001,
        "Count":1,
        "ModifiedAccountName":"",
        "ModifiedDateTime":"2016-10-04T10:16:40.5190025",
        "Name":"Utilization of Food",
        "CardCount":0,
        "Target":95,
        "UniversalId":"SDFOPIJ-SDFGLKJ-ER234-234LF",
        "AccountId":0,
        "AccountName":"Joseph"
    },

    {
        "CreateAccountName":"Joseph",
        "CreateDateTime":"0001-01-01T00:00:00",
        "Description":"Utilization of services",
        "Type":2,
        "Id":1000000001,
        "Count":1,
        "ModifiedAccountName":"",
        "ModifiedDateTime":"2016-10-04T10:16:40.5190025",
        "Name":"Utilization of services",
        "CardCount":0,
        "Target":95,
        "UniversalId":"SDFOPIJ-SDFGLKJ-ER234-234LF",
        "AccountId":0,
        "AccountName":"Joseph"
    }
];

var intersection = json.reduce(function(result, item) {
  Object.keys(result).forEach(function(key) {
    if(! item.hasOwnProperty(key) || item[key] !== result[key]) delete result[key];
  });
  return result;
});

console.log(intersection)