2017-02-03 3 views
1

Итак, у меня есть данные, полученные из REST API в JSON. Я приведу здесь пример.Выберите опору объекта с массивами

var JsonCategoriaHot = { 
    "products": [ 
     {"id": 8, 
     "id_manufacturer": "0", 
     "manufacturer_name": "Fashion Manufacturer", 
     "id_supplier": "0", 
     "id_category_default": "Isso terá de ser uma URL ou um nome", 
     "new": "null", 
     "images": "ur.presta.com", 
     "name": [{"id": "1", "value": "Printed Summer Dress"}, 
        {"id": "2", "value": "Vestido estampado de verão"}], 
     "description": [{"id":"1","value":"Ensaio do Muzenza"}],}, 
     {"id":1}, // just empty data to represent "something" 
     {"id":2}, 
     {"id":3}, 
     {"id":4}, 
     {"id":5}, 
     {"id":9, 
     "name": "Michel Conrado", 
     "images": "ur.presta.com/michelconrado", 
     "manufacturer_name": "Muzenza", 
     "category_default": "mudar de cat_default para url", 
     "description": "Essa é uma descrição" 
     }, 
     {"id":12, 
     "name": "12 Michel Conrado", 
     "images": "ur.presta.com/michelconrado", 
     "manufacturer_name": "Muzenza", 
     "category_default": "mudar de cat_default para url", 
     "description": "Essa é uma descrição" 
     } 
    ] 
}; 

Из этих данных я хочу отобразить некоторые объекты. И измените название строки. С помощью этого кода ниже:

var idparaurl = JsonCategoriaHot.products.map(function(products,i) { 
    return { 
     index: i + 1, 
     name: products.name, 
     image: products.images, 
     fabricante: products.manufacturer_name, 
     catgdf: products.id_category_default, 
     desc: products.description, 
    }; 
}); 

Теперь мне нужно «выбрать» «имя» свойство выбора идентификатора по умолчанию для этого случая будет «Продукты»> «Name»> ID> 2> значение> String.

Это как «уменьшить» и выбрать значение из массива «имя».

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

Она должна возвращать (для каждого объекта - все отображаются данные будут поступать, как это):

[ 
    { 
     "catgdf": "Isso terá de ser uma URL ou um nome tidpo Muzenza", 
     "image": "ur.presta.com", 
     "index": 1, 
     "name": "Vestido estampado de verão", 
     "desc": [ 
      { 
       "id": "1", 
       "value": "Ensaio do Muzenza" 
      } 
     ], 
     "fabricante": "Fashion Manufacturer" 
    } 

    //... 
] 

«описание» массив я буду применять это решение также, так что я должен быть, как это внутри OBJ:

//... 
    "desc": "Ensaio do Muzenza" 
} 
+0

Проводит ли карта итерацию объектов? –

+0

привет! Радж Натхани просто решил мою ситуацию. Благодаря! –

ответ

1

Я бы предложил использовать операцию filter, а не использовать reduce.

Вот функция, которая будет работать:

function parseArrayKeyIndexValue(valArray, id) { 
    if (!(valArray instanceof Array)) { 
    return valArray; 
    } 
    return valArray.filter(function(valArrayItem){ 
    if (valArrayItem.id === id) { 
     return true; 
    } 
    })[0].value; 
} 

карта в вашем примере будет выглядеть следующим образом:

var idparaurl = JsonCategoriaHot.products.map(function(products,i) { 
    return { 
     index: i + 1, 
     name: parseArrayKeyIndexValue(products.name, "2"), 
     image: products.images, 
     fabricante: products.manufacturer_name, 
     catgdf: products.id_category_default, 
     desc: parseArrayKeyIndexValue(products.description, "1"), 
    }; 
}); 

код может работать с предусмотренными, например, данные «JsonCategoriaHot» в это jsbin: http://jsbin.com/zapimineje/edit?js,console,output

+0

WoW! Оно работает!!! Большое спасибо! Извините, что я так новичок, я думаю, что это не сложная проблема. Я изучаю Javascript как 4 месяца. Ты много меня научишь! Спасибо большое! –

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