lodash 铸造、映射和采摘

lodash casting, mapping and picking

我有一个对象数组,我正在将其简化为:

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
}];

我可以在那个方向上得到某些部分,但不能毫无错误地将它们拼凑在一起。我无法找到如何将值转换为浮点数或将 crop 放入存根内部,因为转换为 returns 所有空值。我目前有这个:

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;
      });

感谢任何帮助。

Problem 1: I can't find out how to cast the values to float

使用 parseFloat.

应该很容易解决这个问题

例如

item.dist = parseFloat(item.dist);

Problem 2: put crop INSIDE of stub because casted returns all nulls

既然你已经在使用 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 对象,但以下情况除外item.crop.id 值。

Note: In regards to your solution above, using _.map in an object results to an array.

我基于@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();
});