如何使用 lodash 格式化数组数组

how to format array of arrays using lodash

我正在使用 lodash 按 属性 "isRouteId" 对数组进行分组,如下所示:

    [
    [
        {
            "key": 0,
            "isSurveyId": null,
            "isPausedId": null,
            "isRouteId": "7778a8b2-2a92-49f3-b910-089231678412",
            "isPaused": false,
            "subdivisionId": 0,
            "latlngObj": {
                "latitude": 29.5407882,
                "longitude": -95.7732222
            }
        },
        {
            "key": 1,
            "isSurveyId": null,
            "isPausedId": null,
            "isRouteId": "7778a8b2-2a92-49f3-b910-089231678412",
            "isPaused": false,
            "subdivisionId": 0,
            "latlngObj": {
                "latitude": 29.5406792,
                "longitude": -95.7732779
            }
        }
    ],
    [
        {
            "key": 71,
            "isSurveyId": null,
            "isPausedId": null,
            "isRouteId": "ddb42ef3-6c0e-48fc-9bcb-0a64ad422db4",
            "isPaused": false,
            "subdivisionId": 0,
            "latlngObj": {
                "latitude": 29.5332458,
                "longitude": -95.7766514
            }
        },
        {
            "key": 72,
            "isSurveyId": null,
            "isPausedId": null,
            "isRouteId": "ddb42ef3-6c0e-48fc-9bcb-0a64ad422db4",
            "isPaused": false,
            "subdivisionId": 0,
            "latlngObj": {
                "latitude": 29.5331976,
                "longitude": -95.7765264
            }
        },
        {
            "key": 73,
            "isSurveyId": null,
            "isPausedId": null,
            "isRouteId": "ddb42ef3-6c0e-48fc-9bcb-0a64ad422db4",
            "isPaused": false,
            "subdivisionId": 0,
            "latlngObj": {
                "latitude": 29.5331486,
                "longitude": -95.7763998
            }
        }
    ],
    [
        {
            "key": 93,
            "isSurveyId": null,
            "isPausedId": null,
            "isRouteId": "7a343973-95b4-4508-9076-15a6ebae5555",
            "isPaused": false,
            "subdivisionId": 0,
            "latlngObj": {
                "latitude": 29.5321796,
                "longitude": -95.7738858
            }
        },
        {
            "key": 94,
            "isSurveyId": null,
            "isPausedId": null,
            "isRouteId": "7a343973-95b4-4508-9076-15a6ebae5555",
            "isPaused": false,
            "subdivisionId": 0,
            "latlngObj": {
                "latitude": 29.5321292,
                "longitude": -95.7737588
            }
        }
    ]
]

下一步我需要帮助,即获取嵌套的 "latlngObj" 属性并将它们移动到根级别。 Desired Result 需要如下所示:

    [
    [
        {
            "key": 0,
            "isSurveyId": null,
            "isPausedId": null,
            "isRouteId": "7778a8b2-2a92-49f3-b910-089231678412",
            "isPaused": false,
            "subdivisionId": 0,
            "latitude": 29.5407882,
             "longitude": -95.7732222
        },
        {
            "key": 1,
            "isSurveyId": null,
            "isPausedId": null,
            "isRouteId": "7778a8b2-2a92-49f3-b910-089231678412",
            "isPaused": false,
            "subdivisionId": 0,
            "latitude": 29.5406792,
            "longitude": -95.7732779
        }
    ],
    [
        {
            "key": 71,
            "isSurveyId": null,
            "isPausedId": null,
            "isRouteId": "ddb42ef3-6c0e-48fc-9bcb-0a64ad422db4",
            "isPaused": false,
            "subdivisionId": 0,
            "latitude": 29.5332458,
            "longitude": -95.7766514
        },
        {
            "key": 72,
            "isSurveyId": null,
            "isPausedId": null,
            "isRouteId": "ddb42ef3-6c0e-48fc-9bcb-0a64ad422db4",
            "isPaused": false,
            "subdivisionId": 0,
            "latitude": 29.5331976,
            "longitude": -95.7765264
        },
        {
            "key": 73,
            "isSurveyId": null,
            "isPausedId": null,
            "isRouteId": "ddb42ef3-6c0e-48fc-9bcb-0a64ad422db4",
            "isPaused": false,
            "subdivisionId": 0,
            "latitude": 29.5331486,
            "longitude": -95.7763998
        }
    ],
    [
        {
            "key": 93,
            "isSurveyId": null,
            "isPausedId": null,
            "isRouteId": "7a343973-95b4-4508-9076-15a6ebae5555",
            "isPaused": false,
            "subdivisionId": 0,
            "latitude": 29.5321796,
             "longitude": -95.7738858
        },
        {
            "key": 94,
            "isSurveyId": null,
            "isPausedId": null,
            "isRouteId": "7a343973-95b4-4508-9076-15a6ebae5555",
            "isPaused": false,
            "subdivisionId": 0,
            "latitude": 29.5321292,
            "longitude": -95.7737588
        }
    ]
]

我知道如何使用 jquery 来做到这一点,但那是不可用的。我需要使用 lodash、下划线或 javascript 来实现这一点。

plunker

  var result = _(routesById).groupBy('isRouteId').values().value();

console.log(result);
 _.each(result,(model) => {
   _.each(model,(_model) => {
     _model.latitude = _model.latlngObj.latitude;
     _model.longitude = _model.latlngObj.longitude;
     delete _model.latlngObj;
   });
});

https://plnkr.co/edit/D1hnaRGZNY8TC1pAARJj?p=preview

这是一个只需要对您的集合进行一次迭代的解决方案。在返回 groupBy 键之前,我们在 groupBy 迭代函数中完成所有工作。

var result = _(routesById).groupBy(function(model) {
  model.latitude = model.latlngObj.latitude;
  model.longitude = model.latlngObj.longitude;
  delete(model.latlngObj);
  return model.isRouteId;
}).values().value();

Plunker

我会采取以下方法:

_(coll)
  .flatten()
  .map(i => _.assign({}, _.omit(i, 'latlngObj'), i.latlngObj))
  .groupBy('isRouteId')
  .value()

第一步是flatten() the array, so then you can just map() the items. The idea is that the map iteratee uses assign() to add the latlngObj properties, while omit()用于删除latlngObj,因为它不再需要(如果需要,可以跳过omit()部分)。

然后是对 groupBy() 的简单调用以完成链。