【问题标题】:Merge the two object based on keyValue using Lodash使用 Lodash 基于 keyValue 合并两个对象
【发布时间】:2017-11-27 08:38:18
【问题描述】:

我想基于key:value使用Lodash合并两个对象,这里我需要比较itemIdid,如果两个值相等我想添加priceitemId到列表中。下面我展示了一个小例子以及预期的输出:

item:{
    itemStatus:[
        { itemId:1, status: true, price:200 },
        { itemId:2, status: true, price:500 }
   ],
    menuItem:[
        { id:1, name:'buddy', status: true},
        { id:2, name:'buddy22', status: true},
        { id:3, name:'buddy44', status: true}
    ]
}

我的结果应该是这样的:

{ id:1, itemId:1, name:'buddy', status: true, price:200},
{ id:2, itemId:2, name:'buddy22', status: true, price:500},
{ id:3, itemId:3, name:'buddy44', status: true}

我尝试使用此代码:

var arrResult = _.map(menuItem, function(obj) {
    return _.assign(obj, _.find(itemStatus, {
        itemId: obj.id
    }));
});

但是itemId 正在替换id。有人可以重写代码吗?

【问题讨论】:

    标签: javascript lodash


    【解决方案1】:

    您可以在两个数组上使用_.keyBy(),将它们转换为以 ids/itemIds 作为键的对象。然后使用_.merge()组合两个对象,并使用_.values()转换回数组:

    var itemStatus = [{"itemId":1,"status":true,"price":200},{"itemId":2,"status":true,"price":500}];
    
    var menuItems = [{"id":1,"name":"buddy","status":true},{"id":2,"name":"buddy22","status":true},{"id":3,"name":"buddy44","status":true}];
    
    var result = _.values(_.merge( // merge the objects and get the array
      _.keyBy(menuItems, 'id'), // create an on object of menuItems by id
      _.keyBy(itemStatus, 'itemId') // create an object of itemStatus by id
    ));
    
    console.log(result);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

    【讨论】:

      【解决方案2】:

      这应该可以解决您的问题:

      var arrResult = _.map(item.menuItem, function(obj) {
          return _.assign({}, obj, _.find(item.itemStatus, {
              itemId: obj.id
          }));
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-03
        • 2017-06-08
        • 1970-01-01
        • 2018-08-07
        • 1970-01-01
        • 2018-04-01
        • 1970-01-01
        相关资源
        最近更新 更多