如何比较和推送字段到对象中的子数组

时间:2017-05-03 09:20:00

标签: javascript angularjs

我有一个包含name和id的对象。第二个对象有一些字段和第一个对象的id字段。

例如:

FirstObj = [{
  _id: '48765465f42424',
  Name : 'Sample'
},{
  _id: '48765465f654654',
  Name : 'Sample1'
}]
secondObj = [{
  Field1 : 5464,
  subarray : [{
        Field2 : 14654,
        Field3 : { IsActive : true,
                     FirstObjid : '48765465f42424'
                  },
        Field4 : { IsActive : true,
                     FirstObjid : '48765465f654654'
                  }
            }]
    },
    {
  Field1 : 2145,
  subarray : [{
        Field2 : 544644,
        Field3 : { IsActive : true,
                     FirstObjid : '48765465f654654'
                  },
        Field4 : { IsActive : true,
                     FirstObjid : '48765465f42424'
                  },
        }]
    }]

现在,我需要对两者进行比较,并将该名称从first object推送到secondobj's subobj字段旁边的FirstObjid

预期输出为:

 secondObj = [{
  Field1 : 5464,
  subarray : [{
        Field2 : 14654,
        Field3 : { IsActive : true,
                     FirstObjid : '48765465f42424',
                    Name : 'Sample'
                  },
        Field4 : { IsActive : true,
                     FirstObjid : '48765465f654654',
                    Name : 'Sample1'
                  }
            }]
    },
    {
  Field1 : 2145,
  subarray : [{
        Field2 : 544644,
        Field3 : { IsActive : true,
                     FirstObjid : '48765465f654654',
                     Name : 'Sample1'
                  },
        Field4 : { IsActive : true,
                     FirstObjid : '48765465f42424',
                    Name : 'Sample'
                  },
        }]
    }]

我怎样才能实现它。

2 个答案:

答案 0 :(得分:4)

试试这个

secondObj.subarray.forEach(function(item){
if(item.FirstObjid==FirstObj._id)
    item.Name = FirstObj.Name
})

答案 1 :(得分:0)

使用map函数并比较像这样的对象ID



var secondObj =  [{
  Field1 : 5464,
  subarray : [{
        Field2 : 14654,
        Field3 : 'sfsadf',
        FirstObjid : '48765465f42424'
        }]
    },
    {
  Field1 : 2145,
  subarray : [{
        Field2 : 544644,
        Field3 : 'awrfsa',
        FirstObjid : '48765465f654654'
        }]
    }]
    
 var FirstObj = [{
  _id: '48765465f42424',
  Name : 'Sample'
},{
  _id: '48765465f654654',
  Name : 'Sample1'
}]

secondObj.subarray = secondObj.map(o => o.subarray.map(k=> FirstObj.map(l=> { 
  if(l._id == k.FirstObjid){
     k.Name = l.Name
  }
  return o;
})))
 

console.log(secondObj)