如何使用 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 来实现这一点。
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;
});
});
这是一个只需要对您的集合进行一次迭代的解决方案。在返回 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();
我会采取以下方法:
_(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() 的简单调用以完成链。
我正在使用 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 来实现这一点。
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;
});
});
这是一个只需要对您的集合进行一次迭代的解决方案。在返回 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();
我会采取以下方法:
_(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() 的简单调用以完成链。