2016-05-30 4 views
0

Я использую lodash группу массив по свойству «isRouteId», который выглядит следующим образом:как форматировать массив массивов с помощью lodash

[ 
    [ 
     { 
      "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" и переместите их на корневой уровень. Какой желаемый результат должен выглядеть следующим образом:

[ 
    [ 
     { 
      "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, underscore или javascript.

plunker

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

console.log(result); 

ответ

1

Вот решение, которое требует только одной итерации по коллекции. Мы выполняем всю работу внутри итерационной функции 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

3

Я бы следующий подход:

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

Первый шаг заключается в flatten() массив, так, то вы можете просто map() детали. Идея состоит в том, что карта iteratee использует assign(), чтобы добавить свойства latlngObj, а omit() используется, чтобы избавиться от latlngObj, так как он больше не нужен (вы можете пропустить раздел omit(), если хотите).

Тогда просто позвонить groupBy(), чтобы закончить цепь.

Смежные вопросы