Я пытаюсь найти более быстрый способ сравнить два объекта json. В настоящее время у нас есть функция, которая имеет около 7 $ .each() вызовов в ней, что, я считаю, очень неэффективным способом сделать это, но я понятия не имею, как это сделать быстрее. Я отправлю нашу функцию, которая сравнивает два объекта, а также образец двух объектов.Сравнение двух объектов JSON
Это всего лишь одна часть данных из объекта-1. Во всем объекте есть 4000 таких объектов.
{
"aaData": [
{
"serial":"LRRFNGHX",
"model":"Dell Optiplex",
"os":"Windows NT",
"man":"Dell",
"group":"558D",
"pcName":"LID93740SHD0",
"department":"HR",
"customerName":"Bill gates",
"username":"bgates",
"deployLocation":"Chicago, IL",
"currentLocation":"127.0.0.1",
"cnStatus":"Usable",
"previousModel":"Gateway",
"id":"256",
"enabled":"false"
}
]
}
Это одно значение от объекта-2. Этот объект значительно меньше, и в объекте-2 может быть не более 100 значений.
{
"team": {},
"department": {
"Automotive": "Automotive"
},
"os": {},
"man": {},
"model": {},
"cnStatus": {
"Usable": "Usable"
}
}
Это самая уродливая функция. Это сравнивает эти два объекта, и устанавливает включено свойство в более крупном объекте к истинному для всех матчей:
function objCompare(){
newTotal = 0;
var typeCount = 0;
var menuArray = [];
console.log(JsonObj);
$.each(menuObject, function (i, type){
var empty = jQuery.isEmptyObject(type);
if(empty === false){
if(typeCount == 0){
$.each(type, function (j, subtype){
menuArray.push(subtype);
$.each(JsonObj, function(key, element){
element.enabled = "false";
$.each(element, function(key, subelement){
if((subelement != null) && (menuArray.contains(subelement.replace(/\s/g, '')))){
element.enabled = "true";
}
});
});
});
}else if(typeCount >= 1){
$.each(type, function (j, subtype){;
menuArray.push(subtype);
});
$.each(JsonObj, function(key, element){
if((element.enabled === "true") && !menuArray.contains(element[i])){
element.enabled = "false";
}
});
}
typeCount++;
}
if(empty === true){
if(typeCount === 0){
$.each(JsonObj, function(key, element){
element.enabled = "false";
});
}
}
});
}
Что вы хотите на самом деле знать, в сравнении двух объектов? Вы оставили эту важную деталь! Вы хотите знать, что каждый объект имеет точно такие же ключи и значения для этих ключей? Что делать, если объект имеет дополнительный ключ, который не существует в другом объекте? Вам нужно сделать глубокое, вложенное сравнение, так что если у вас есть массив объектов, содержимое этого массива или объекта будет таким же, как и в другом объекте? – jfriend00
Я хочу знать, есть ли свойство в объекте-1, которое соответствует свойству в объекте-2. Это должно быть глубокое сравнение. И количество ключей не должно иметь значения, просто нужно увидеть, существует ли значение этого ключа в любом месте другого объекта, а затем установить его свойство с включенным значением «true». –
Вы просто хотите знать, существует ли свойство в обоих объектах ? Или, если свойство и значение для этого свойства одинаковы для обоих объектов? Вы ищете конкретное имя свойства? Или просто любое свойство в 'obj1' также существует в' obj2' на любой глубине объекта? Вы игнорируете какие-либо конкретные имена свойств, которые вы не хотите сравнивать? – jfriend00