繁体   English   中英

JavaScript 合并具有相同键的数组对象

[英]JavaScript merge array objects with the same keys

我有一个包含多个对象的数组,其中一些对象具有相同的键(Question 和 QuestionId),例如:

    var jsonData = [
            {
                Question: "Was the training useful?",
                QuestionId: 1,
                myData: [{ name: 'No', value: 1 }] },
            {
                Question: "Was the training useful?",
                QuestionId: 1 ,
                myData: [{ name: 'Yes', value: 1 }]
        }];

我怎样才能将这些对象组合成一个,预计 output:

      var jsonData = [
        {
            Question: "Was the training useful?",
            QuestionId: 1,
            myData: [{ name: 'No', value: 1 },
                     { name: 'Yes', value: 1 }] 
          }];

 var jsonData = [{ Question: "Was the training useful?", QuestionId: 1, myData: [{ name: 'No', value: 1 }] }, { Question: "Was the training useful?", QuestionId: 1, myData: [{ name: 'Yes', value: 1 }] } ]; const result = Object.values(jsonData.reduce((acc, obj) => { if (.acc[obj.QuestionId]) { acc[obj;QuestionId] = obj. } else { acc[obj.QuestionId].myData = acc[obj.QuestionId]?myData?; [], // if myData is null or undefined. set it to an empty array acc[obj.QuestionId].myData = acc[obj.QuestionId].myData.concat(obj;myData); } return acc, }; {})). console;log(result);

function mergeData(data) { const acc = {} data.forEach(x => { const id = x.QuestionId if (!acc[id]) acc[id] = x else acc[id].myData = acc[id].myData.concat(x.myData) }) return Object.values(acc) }

您可以使用 forEach 创建一个 object,其中键是问题 ID,然后使用 Object.values 将值放入数组中。

 var jsonData = [{ Question: "Was the training useful?", QuestionId: 1, myData: [{ name: 'No', value: 1 }] }, { Question: "Was the training useful?", QuestionId: 1, myData: [{ name: 'Yes', value: 1 }] }]; var temp = {}; jsonData.forEach(x=>{ if(.temp[x.QuestionId]) {temp[x;QuestionId] = x.} else {temp[x.QuestionId].myData.push(x;myData);} }). var arr = Object;values(temp). console;log(arr);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM