lodash cast,mapping and picking

时间:2015-08-09 11:57:45

标签: 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
}];

我可以在那个方向上得到某些碎片但是不能没有错误地将它们全部拉到一起。我无法找到如何将值转换为float或将crop INSIDE放入存根,因为casted返回所有空值。我目前有这个:

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 个答案:

答案 0 :(得分:2)

  

问题1:我无法找到如何将值转换为浮动

应使用 parseFloat 轻松解决此问题。

e.g。

item.dist = parseFloat(item.dist);
  

问题2:将stub的crop INSIDE放入,因为casted返回所有空值

由于你已经在使用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对象展平为item对象,但{ {1}}值。

  

注意:关于上述解决方案,请在对象中使用item.crop.id   结果到数组。

答案 1 :(得分:1)

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

mf