2015-08-09 72 views
0

我有我简化,因为这对象的数组:lodash铸造,映射和采摘

var expenses = [ 
     { 
      arm: "0", 
      cat_id: "1", 
      crop: { 
      crop: "corn", 
      id: 1 
      }, 
      crop_id: "1", 
      dist: "164.97", 
      expense: "Fertilizer", 
      id: "1", 
      loan_id: "1" 
     }, 
     { 
      arm: "20", 
      cat_id: "8", 
      crop: { 
      crop: "corn", 
      id: 1 
      }, 
      crop_id: "1", 
      dist: "0", 
      expense: "Labor", 
      id: "8", 
      loan_id: "1" 
     } 
     ]; 

我想用这个来结束:

var expenses = [{ 
    arm: 0, 
    cat_id: 1, 
    crop: "corn", 
    crop_id: 1, 
    dist: 164.97, 
    expense: "Fertilizer", 
    id: 1, 
    loan_id: 1 
},{ 
    arm: 20, 
    cat_id: 6, 
    crop: "corn", 
    crop_id: 1, 
    dist: 0, 
    expense: "Labor", 
    id: 1, 
    loan_id: 1 
}]; 

我可以得到一定的件在那个方向,但不能没有错误地一起拉。我无法找到如何将值浮动或将作物内部的存根,因为铸造返回所有空值。我目前有这样的:

flattened = _.map(expenses, function(item){ 
     var crop = item.crop.crop; 
     var stub = _.pick(item, [ 
      'id', 
      'loan_id', 
      'cat_id', 
      'expense', 
      'crop_id', 
      'arm', 
      'dist' 
      ]); 
      var casted = _.map(stub, function(i){ 
      i.crop = crop; 
      return i; 
      }); 
      return stub; 
     }); 

任何帮助表示赞赏。

回答

2

问题1:我无法找出如何铸就值浮动使用parseFloat

这应该很容易解决。

例如

item.dist = parseFloat(item.dist); 

问题2:存根把作物INSIDE因为铸造返回所有空

既然你已经使用lodash,不妨习惯于他们的链接功能(延迟计算)。

DEMO

var flattened = _.map(expenses, function(item) { 
    item.dist = parseFloat(item.dist); 
    return _(item) 
    .omit('crop') 
    .assign(_.omit(item.crop, 'id')) 
    .value(); 
}); 

溶液上方的整个费用阵列映射,变换item.dist到一个浮点值,然后朝着与item.crop.id值的异常的item对象平坦化从item.crop对象中的值。

注意:关于上述解决方案,在对象 中使用_.map结果为数组。

1

我为自己的学习目的基于@ryeballar代码的尝试。

var flattened = _.map(expenses, function(item) { 
    return _(item) 
    .set('crop', item.crop.crop) // set item.crop 
    .set('dist', parseFloat(item.dist)) // set dist as (float)item.dist 
    .value(); 
});