2016-10-12 1 views
0

У меня есть массив JSON с несколькими (динамическими) объектами JSON. Мне нужно сравнить объекты и выбрать ключи, которые имеют одинаковое значение во всех объектах. Мой JSON выглядит так:Как применить фильтр для получения элементов, которые имеют одинаковое значение в JSONобъектах внутри массива JSON, используя AngularJS

[ 
    { 
     "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. Он имеет одинаковую ценность во всех объектах.

Трудный случай, сам ключ динамический. Я не могу жестко кодировать ключ и сравнивать. Название ключа может измениться или может появиться другой набор ключей. Я ищу универсальное решение для сравнения и получения «пересечения» объектов.

+0

Вы должны итерацию по списку и хранить массив ключей и значений в другой объект, а затем проверить, если что-либо ключ имеет все же значения или нет – Hmahwish

ответ

1

Вы можете сделать это только с 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)

Смежные вопросы