2016-05-18 3 views
1

У меня есть данные, которые возвращаются мне из REST API. Я бы хотел, чтобы это было в определенном формате для моего приложения Angular 2.Как я могу преобразовать эти данные с помощью подчеркивания js?

Как я могу выполнить следующее преобразование данных, используя знак подчеркивания js?

данных, возвращаемый из REST API:

[  
    { 
     "ProductVariantID": "133", 
     "ProductID": "259", 
     "ProductGender": "Male", 
     "Size": "17.5", 
     "Color": "Red", 
     "MSRP": "0", 
     "MAP": "0", 
     "UPC": "99999106" 
    }, 
    { 
     "ProductVariantID": "128", 
     "ProductID": "259", 
     "ProductGender": "Male", 
     "Size": "17.5", 
     "Color": "Blue", 
     "MSRP": "0", 
     "MAP": "0", 
     "UPC": "99999101" 
    }, 
    { 
     "ProductVariantID": "130", 
     "ProductID": "259", 
     "ProductGender": "Male", 
     "Size": "19.5", 
     "Color": "Blue", 
     "MSRP": "0", 
     "MAP": "0", 
     "UPC": "99999103" 
    }, 
    { 
     "ProductVariantID": "129", 
     "ProductID": "259", 
     "ProductGender": "Male", 
     "Size": "18.5", 
     "Color": "Blue", 
     "MSRP": "0", 
     "MAP": "0", 
     "UPC": "99999102" 
    }, 
    { 
     "ProductVariantID": "132", 
     "ProductID": "259", 
     "ProductGender": "Male", 
     "Size": "15.5", 
     "Color": "Red", 
     "MSRP": "0", 
     "MAP": "0", 
     "UPC": "99999105" 
    },  
    { 
     "ProductVariantID": "131", 
     "ProductID": "259", 
     "ProductGender": "Male", 
     "Size": "21.5", 
     "Color": "Blue", 
     "MSRP": "0", 
     "MAP": "0", 
     "UPC": "99999104" 
    }, 
    { 
     "ProductVariantID": "127", 
     "ProductID": "259", 
     "ProductGender": "Male", 
     "Size": "15.5", 
     "Color": "Blue", 
     "MSRP": "0", 
     "MAP": "0", 
     "UPC": "99999100" 
    }  
] 

Я хочу, чтобы преобразовать его в следующем. Обратите внимание, что массив верхнего уровня сортируется в алфавитном порядке по свойству «Цвет» его объектов, а массивы Variants сортируются по свойству «Размер» с числами его объектов. По сути, я хочу новый массив объектов, сгруппированных по цвету и содержащих исходные объекты в свойстве массива «Варианты».

Желаемый результат:

[ 
    { 
     "Color": "Blue", 
     "Variants": [ 
      { 
       "ProductVariantID": "127", 
       "ProductID": "259", 
       "ProductGender": "Male", 
       "Size": "15.5", 
       "Color": "Blue", 
       "MSRP": "0", 
       "MAP": "0", 
       "UPC": "99999100" 
      }, 
      { 
       "ProductVariantID": "128", 
       "ProductID": "259", 
       "ProductGender": "Male", 
       "Size": "17.5", 
       "Color": "Blue", 
       "MSRP": "0", 
       "MAP": "0", 
       "UPC": "99999101" 
      }, 
      { 
       "ProductVariantID": "129", 
       "ProductID": "259", 
       "ProductGender": "Male", 
       "Size": "18.5", 
       "Color": "Blue", 
       "MSRP": "0", 
       "MAP": "0", 
       "UPC": "99999102" 
      }, 
      { 
       "ProductVariantID": "130", 
       "ProductID": "259", 
       "ProductGender": "Male", 
       "Size": "19.5", 
       "Color": "Blue", 
       "MSRP": "0", 
       "MAP": "0", 
       "UPC": "99999103" 
      }, 
      { 
       "ProductVariantID": "131", 
       "ProductID": "259", 
       "ProductGender": "Male", 
       "Size": "21.5", 
       "Color": "Blue", 
       "MSRP": "0", 
       "MAP": "0", 
       "UPC": "99999104" 
      }  
     ],    
    } 
    { 
     "Color": "Red", 
     "Variants": [ 
      { 
       "ProductVariantID": "132", 
       "ProductID": "259", 
       "ProductGender": "Male", 
       "Size": "15.5", 
       "Color": "Red", 
       "MSRP": "0", 
       "MAP": "0", 
       "UPC": "99999101" 
      }, 
      { 
       "ProductVariantID": "133", 
       "ProductID": "259", 
       "ProductGender": "Male", 
       "Size": "17.5", 
       "Color": "Red", 
       "MSRP": "0", 
       "MAP": "0", 
       "UPC": "99999101" 
      },  
     ],    
    } 
] 
+0

Вы должны показать нам, что вы уже пробовали, прежде чем помочь. –

+0

Зачем вам нужно использовать подчеркивание? Должно быть возможно сделать это просто с петлями for и многомерными массивами – theatlasroom

+0

Мне не нужно использовать подчеркивание, но, похоже, подчеркивание позволит использовать этот способ ... Я пробовал функцию groupBy() но это дает мне данные в таком виде: { "Blue": [ { "ProductVariantID": "127", "ProductID": "259", "ProductGender": "Мужской", " Размер ": "15,5", "Цвет": "Синий", "MSRP": "0", "МАП": "0", "СКП": "99999100" }, ... ], «Красный»: [ .... ] } – Foxy

ответ

1

Вы можете использовать карту после того, как группа по для создания требуемой мощности

var temp1=_.groupBy(result, 'Color'); 
_.map(temp1,function(item,key){return {'Color':key,'Variants':item}}); 
Смежные вопросы