如何使用javascript合并两个不同的对象数组

如何使用javascript合并两个不同的对象数组,javascript,node.js,javascript-objects,Javascript,Node.js,Javascript Objects,我有两个不同的对象数组。我必须以嵌套的方式合并这两个对象数组 var array1=[{ PersonalID: '11', qusetionNumber: '1', value: 'Something' }, { PersonalID: '12', qusetionNumber: '2', value: 'whatever' }, { PersonalID: '13', qusetionNumber: '3', value: 'a

我有两个不同的对象数组。我必须以嵌套的方式合并这两个对象数组

var array1=[{ PersonalID: '11', qusetionNumber: '1', value: 'Something' },
                { PersonalID: '12', qusetionNumber: '2', value: 'whatever' },
                { PersonalID: '13', qusetionNumber: '3', value: 'anything' },
                { PersonalID: '14', qusetionNumber: '4', value: 'null' }];

var array2=[{ qusetionNumber: '2', chID: '111', cValue: 'red' },
            { qusetionNumber: '2', chID: '112', cValue: 'green'},
            { qusetionNumber: '2', chID: '113', cValue: 'blue' },
            {qusetionNumber: '3', choiceID: '114', cValue: 'yellow'},
            {qusetionNumber: '4', choiceID: '115', cValue: 'red'}];
输出应该是这种格式,那么如何使用循环或下划线? 输出

  personalID:[{
            personalID:11,
            qusetionNumber:1,
            value: 'Something' 
           },
               {
            personalID:12,
            qusetionNumber:2,
            value: 'whatever',
            choice:[                        
                { qusetionNumber: '2', chID: '111', cValue: 'red' },
                        { qusetionNumber: '2', chID: '112', cValue: 'green'},
                        { qusetionNumber: '2', chID: '113', cValue: 'blue' }
                ] 
           },
           {
            personalID:13,
            qusetionNumber:3,
            value: 'anything',
            choice:[                        
                { qusetionNumber: '3', chID: '114', cValue: 'yellow' }
                           ] 
               },
               {
            personalID:14,
            qusetionNumber:4,
            value: 'null',
            choice:[                        
                { qusetionNumber: '4', chID: '115', cValue: 'red' }
                           ] 
               }]

您可以使用哈希表作为右侧
questionNumber
的引用,并在必要时构建一个新属性
choice

var array1=[{PersonalID:'11',questionNumber:'1',value:'Something'},{PersonalID:'12',questionNumber:'2',value:'whatever'},{PersonalID:'13',questionNumber:'3',value:'anything'},{PersonalID:'14',questionNumber:'4',value:'null'},
array2=[{questionNumber:'2',chID:'111',cValue:'red'},{questionNumber:'2',chID:'112',cValue:'green'},{questionNumber:'2',chID:'113',cValue:'blue'},{questionNumber:'3',choiceID:'114',cValue:'yellow'},{questionNumber:'4',choiceID:'115',cValue:'red},
hash=Object.create(null);
数组1.forEach(函数(a){
hash[a.questionNumber]=a;
});
array2.forEach(函数(a){
if(散列[a.questionNumber]){

哈希[a.questionNumber]。choice=hash[a.questionNumber]。choice | |[]; 哈希[a.questionNumber].choice.push(a); } });
控制台日志(array1)您可以仅使用vanilla JS以以下方式完成此操作

现代ES6中的示例+

var array3 = array1.map(question => {
    let newQuestion = Object.assign({},question);   // In order not to mutate the items array1
    newQuestion.choice = array2.filter(choice => choice.qusetionNumber === question.qusetionNumber);
    return newQuestion;
});
旧语法:

var array3 = array1.map(function(question) {
    var newQuestion = Object.assign({},question);   // In order not to mutate the items array1
    newQuestion.choice = array2.filter(function(choice){ return choice.qusetionNumber === question.qusetionNumber});
    return newQuestion;
});
如果无法指望Object.assign可用,则可以在lodash中使用assign函数,或在下划线或jQuery中进行扩展

var数组1=[{
PersonalID:'11',
qusetionNumber:'1',
价值观:“某物”
}, {
PersonalID:'12',
qusetionNumber:'2',
价值观:“无论什么”
}, {
PersonalID:'13',
qusetionNumber:'3',
价值观:“任何东西”
}, {
PersonalID:'14',
qusetionNumber:'4',
值:“null”
}];
变量array2=[{
qusetionNumber:'2',
奇德:“111”,
C值:“红色”
}, {
qusetionNumber:'2',
齐德:“112”,
C值:“绿色”
}, {
qusetionNumber:'2',
chID:'113',
C值:“蓝色”
}, {
qusetionNumber:'3',
选项:“114”,
C值:“黄色”
}, {
qusetionNumber:'4',
选项:“115”,
C值:“红色”
}];
var array3=array1.map(函数(问题){
var newQuestion=Object.assign({},question);//为了不改变项目数组1
newQuestion.choice=array2.filter(函数(选项){
返回choice.qusetionNumber==question.qusetionNumber
});
返回新问题;
});

log(JSON.stringify(array3,null,4))这是我的解决方案,也许会有帮助

var array1=[{ PersonalID: '11', qusetionNumber: '1', value: 'Something' },
                { PersonalID: '12', qusetionNumber: '2', value: 'whatever' },
                { PersonalID: '13', qusetionNumber: '3', value: 'anything' },
                { PersonalID: '14', qusetionNumber: '4', value: 'null' }];
var array2=[{ qusetionNumber: '2', chID: '111', cValue: 'red' },
            { qusetionNumber: '2', chID: '112', cValue: 'green'},
            { qusetionNumber: '2', chID: '113', cValue: 'blue' },
            {qusetionNumber: '3', choiceID: '114', cValue: 'yellow'},
            {qusetionNumber: '4', choiceID: '115', cValue: 'red'}];

var i = -1;
array1.forEach(function(a){ 
var arrayWithQuestions = [];
  array2.forEach(function(y){
    if(a.qusetionNumber == y.qusetionNumber){
      i++;
      arrayWithQuestions.push(array2[i]);          
    }
  })
  if(arrayWithQuestions.length!=0){
    a.choice = arrayWithQuestions;
  }  
  console.log(arrayWithQuestions);  
})
console.log('how array1 looks like');
console.log(array1);
结果:

[
    {
        "PersonalID":"11",
        "qusetionNumber":"1",
        "value":"Something"
    },
    {
        "PersonalID":"12",
        "qusetionNumber":"2",
        "value":"whatever",
        "choice":[
            {"qusetionNumber":"2","chID":"111","cValue":    "red"},
            {"qusetionNumber":"2",  "chID":"112","cValue":"green"},
            {"qusetionNumber":"2", "chID":"113",    "cValue":"blue"}
            ]
    },
    {
        "PersonalID":"13",
        "qusetionNumber":"3",
        "value":"anything",
        "choice":   [
            {"qusetionNumber":"3", "choiceID":"114", "cValue":"yellow"}
        ]
    },
    {
    "PersonalID":"14",
    "qusetionNumber":"4",
    "value":"null",
    "choice":   [
        {"qusetionNumber":"4", "choiceID":"115", "cValue":"red"}
        ]
    }
]

我尝试过使用forloop,但在array2上没有得到正确的结果
groupBy
,然后在Array1上得到
map
你能分享一下你的代码吗?hash[a.questionNumber].choice=hash[a.questionNumber].choice | |[]^TypeError:无法读取未定义的属性'choice',给出上述错误您可以添加一个检查
questionNumber
引用是否存在。我已经解决了错误,但无法获得所有选择..personalID的意思是:“12”我获得了所有选择,但对于其他人,我没有获得可能是因为我更改了将属性名称更改为
问题编号
,没有输入错误。我遇到的问题与PersonID相同:“12”我无法为其他人选择。