#javascript #json #intersection
#javascript #json #пересечение
Вопрос:
У меня есть массив 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 . Он имеет одинаковое значение во всех объектах.
Сложный случай заключается в том, что сам ключ динамический. Я не могу жестко запрограммировать ключ и сравнить. Имя ключа может измениться или может прийти другой набор ключей. Я ищу общее решение для сравнения и получения «пересечения» объектов.
Комментарии:
1. Вы должны выполнить итерацию по списку и сохранить массив ключей и значений в другом объекте, а затем проверить, имеет ли этот конкретный ключ все одинаковые значения или нет
Ответ №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 resu<
});
console.log(intersection)