Underscore JS嵌套了每个合并对象

时间:2015-03-05 22:06:27

标签: javascript underscore.js

我有两个对象数组,我试图合并

var status = [
  {name: 'status_1', pk:1 }, {name: 'status_2', pk:2 }
]

var to_be_merged = [
  {'status_pk': 1, 'value': 10}, {'status_pk': 2, value: 20}
]

期望的结果

var status = [
   {name:'status_1', 
    pk:1, 
    to_be_merged:{
       'status_pk': 1, 'value': 10
    }, {
     name: 'status_2', 
     pk:2,
    to_be_merged: {
      'status_pk': 2, value: 20}
    }, 
]

我尝试过使用嵌套_.each,但我失去了上述each的范围

     _.each(status, function(status) {
        var objs = _.each(to_be_merged, function(x) {
          if (x.status_pk == status.pk) {
            // do something
          }
        })
      })

2 个答案:

答案 0 :(得分:0)

map可以帮到你。将其与mergewhere合并,将两个项目合并在一起。

_.each(status, function(item) {  
    item['to_be_merged'] = _.find(to_be_merged, function(other) {
        return other['status_pk'] === item.pk;
    });
})

答案 1 :(得分:0)

这稍微冗长一点,但你可以看到发生了什么:

var stat = {
  s: [
       {name: 'status_1', pk:1 }, {name: 'status_2', pk:2 }
   ],
  m: [
      {'status_pk': 1, 'value': 10}, {'status_pk': 2, value: 20}
  ]}
 var merged = []

 _(stat.s).each(function(s){
   _(stat.m).each(function(m){
   var obj = {};
   if(s.pk == m.status_pk){ 
     obj.name = s.name;
     obj.pk = s.pk;
     obj.to_be_meged = m
     merged.push(obj);
   }
  })
})
console.log(merged);

DEMO

相关问题