【问题标题】:Merge and compare with in JSON objects在 JSON 对象中合并和比较
【发布时间】:2015-01-05 06:33:50
【问题描述】:

我想在 JSON 中执行合并和比较对象。

StudentJson:[
{ name : "harish",
  empid: "323234",
  exams: "central"
},
{ name : "harish",
  empid: "323234",
  week41: "30",
  week42: "20",
},
{ name : "harish",
  empid: "323234",
  week47: "47",
  week50: "86",
},
{ name : "harish",
  empid: "323234",
  week51: "67",
  week52: "90",
},
{ name : "kishore",
  empid: "783433",
  exams: "state"
},
{ name : "kishore",
  empid: "783433",
  week20: "23",
  week23: "56",
},
{ name : "kishore",
  empid: "323234",
  week30: "75",
  week38: "73",
},
{ name : "kishore",
  empid: "323234",
  week40: "23",
  week41: "86",
},... 
]

预期的 Json 输出:

StudentJson:[
{ name : "harish",
  empid: "323234",
  exams: "central",
  week41: "30",
  week42: "20",
  week47: "47",
  week50: "86",
  week51: "67",
  week52: "90"
},
{ name : "kishore",
  empid: "783433",
  exams: "state",
  week20: "23",
  week23: "56",
  week30: "75",
  week38: "73",
  week40: "23",
  week41: "86"
}
]

请帮助我在基本的 JavaScript 程序中实现。

【问题讨论】:

  • 您开始吧,当您遇到困难时我们会提供帮助。请展示你到目前为止所拥有的。
  • @user162366 见帖子。谢谢

标签: javascript jquery html json object


【解决方案1】:

编辑、更新

注意,出现StudentJson 包含语法错误,重复empid 值? index12356StudentJson 内的对象内的尾随逗号。此外,属性名称为kishore 的最后两个对象的empid 值与属性名称为harish 的对象的empid 相同,即"323234"

调整以上语法错误并重复empid

json

    var StudentJson = [
        {
            "name": "harish",
            "empid": "323234",
            "exams": "central",
            "week41": "30",
            "week42": "20",
            "week47": "47",
            "week50": "86",
            "week51": "67",
            "week52": "90"
        },
        {
            "name": "harish",
            "empid": "323234",
            "week41": "30",
            "week42": "20"
        },
        {
            "name": "harish",
            "empid": "323234",
            "week47": "47",
            "week50": "86"
        },
        {
            "name": "harish",
            "empid": "323234",
            "week51": "67",
            "week52": "90"
        },
        {
            "name": "kishore",
            "empid": "783433",
            "exams": "state",
            "week20": "23",
            "week23": "56",
            "week30": "75",
            "week38": "73",
            "week40": "23",
            "week41": "86"
        },
        {
            "name": "kishore",
            "empid": "783433",
            "week20": "23",
            "week23": "56"
        },
        {
            "name": "kishore",
            "empid": "783433",
            "week30": "75",
            "week38": "73"
        },
        {
            "name": "kishore",
            "empid": "783433",
            "week40": "23",
            "week41": "86"
        }
    ];

js

var res = [];
StudentJson.map(function(v, k) {
  if (k === 0) {
    res.push(v);
  };
  if (k > 0 && v.name === res[0].name) {
    $.extend(res[0], v)
  } else if(v.name !== res[0].name) {
    res[1] ? $.extend(res[1], v) : res.push(v)
  };
}); 

    var StudentJson = [
        {
            "name": "harish",
            "empid": "323234",
            "exams": "central",
            "week41": "30",
            "week42": "20",
            "week47": "47",
            "week50": "86",
            "week51": "67",
            "week52": "90"
        },
        {
            "name": "harish",
            "empid": "323234",
            "week41": "30",
            "week42": "20"
        },
        {
            "name": "harish",
            "empid": "323234",
            "week47": "47",
            "week50": "86"
        },
        {
            "name": "harish",
            "empid": "323234",
            "week51": "67",
            "week52": "90"
        },
        {
            "name": "kishore",
            "empid": "783433",
            "exams": "state",
            "week20": "23",
            "week23": "56",
            "week30": "75",
            "week38": "73",
            "week40": "23",
            "week41": "86"
        },
        {
            "name": "kishore",
            "empid": "783433",
            "week20": "23",
            "week23": "56"
        },
        {
            "name": "kishore",
            "empid": "783433",
            "week30": "75",
            "week38": "73"
        },
        {
            "name": "kishore",
            "empid": "783433",
            "week40": "23",
            "week41": "86"
        }
    ];

var res = [];
StudentJson.map(function(v, k) {
  if (k === 0) {
    res.push(v);
  };
  if (k > 0 && v.name === res[0].name) {
    $.extend(res[0], v)
  } else if(v.name !== res[0].name) {
    res[1] ? $.extend(res[1], v) : res.push(v)
  };
}); 

$("pre").text(JSON.stringify(res, null, 4))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<pre></pre>

我将如何为“N”个学生 json 对象实现这个 StudentJson.map 函数..-user162366

试试

   var res = [];
   StudentJson.map(function (v, k) {
       if (k === 0) {
           res.push(v);
       } else {
           var j = res.filter(function (value, key) {
               return value.name === v.name
           })[0];
           if (j) {
               $.extend(res[$.inArray(j, res)], v)
           } else {
               res.push(v)
           }
       };
       return res
   });

var StudentJson = [{
           "name": "harish",
               "empid": "323234",
               "exams": "central",
               "week41": "30",
               "week42": "20",
               "week47": "47",
               "week50": "86",
               "week51": "67",
               "week52": "90"
       }, {
           "name": "harish",
               "empid": "323234",
               "week41": "30",
               "week42": "20"
       }, {
           "name": "harish",
               "empid": "323234",
               "week47": "47",
               "week50": "86"
       }, {
           "name": "harish",
               "empid": "323234",
               "week51": "67",
               "week52": "90"
       }, {
           "name": "kishore",
               "empid": "783433",
               "exams": "state",
               "week20": "23",
               "week23": "56",
               "week30": "75",
               "week38": "73",
               "week40": "23",
               "week41": "86"
       }, {
           "name": "kishore",
               "empid": "783433",
               "week20": "23",
               "week23": "56"
       }, {
           "name": "kishore",
               "empid": "783433",
               "week30": "75",
               "week38": "73"
       }, {
           "name": "kishore",
               "empid": "783433",
               "week40": "23",
               "week41": "86"
       }, {
           "name": "abc",
               "empid": "123456",
               "week30": "123",
               "week38": "456"
       }, {
           "name": "abc",
               "empid": "123456",
               "week40": "789",
               "week41": "012"
       }, {
           "name": "def",
               "empid": "654321",
               "week30": "012",
               "week38": "345"
       }, {
           "name": "def",
               "empid": "654321",
               "week40": "678",
               "week41": "901"
       }];

   var res = [];
   StudentJson.map(function (v, k) {
   if (k === 0) {
       res.push(v);
   } else {
       var j = res.filter(function (value, key) {
           return value.name === v.name
       })[0];
       if (j) {
           $.extend(res[$.inArray(j, res)], v)
       } else {
           res.push(v)
       }
   };
   return res
   });
      
       $("pre").text(JSON.stringify(res, null, 4))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<pre></pre>

【讨论】:

  • 我将如何为“N”个学生 json 对象实现这个 StudentJson.map 函数..
【解决方案2】:

你可以做这个功能

var deepEquals = function(o1, o2) {
         var k1 = Object.keys(o1).sort();
         var k2 = Object.keys(o2).sort();
         if (k1.length != k2.length) return false;
         return k1.zip(k2, function(keyPair) {
           if(typeof o1[keyPair[0]] == typeof o2[keyPair[1]] == "object"){
             return deepEquals(o1[keyPair[0]], o2[keyPair[1]])
           } else {
             return o1[keyPair[0]] == o2[keyPair[1]];
           }
         }).all();
       }
    });

跟我想一想,你有 StudentJson 和你的 8 个值,你需要一一比较。

我们可以使用循环:

for(var i=0;i < StudentJson.length; i++){

     //Here we do compare the value of the first position with the second position
  if (deepEquals(StudentJson[i], StudentJson[i+1])){
     //This condition is going returning true or false
  }
}

【讨论】:

  • 我将如何在多个对象中使用它。因为我们在这里只传递了两个对象。 var anObj = JSON.parse(jsonString1); var anotherObj= JSON.parse(jsonString2);
  • 我不确定,如何使用这个功能。你能分享任何工作的例子吗?谢谢。
猜你喜欢
  • 1970-01-01
  • 2015-04-02
  • 2022-01-07
  • 2022-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
相关资源
最近更新 更多