2017-02-03 9 views
1

このデータはJSONのREST APIから取得しています。私は例としてここに入れます。配列を持つオブジェクトの小道具を選択

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, 
    }; 
}); 

は今、私は「製品」>「名」> ID> 2>値>文字列になります。この場合のデフォルトのIDを選択するプロパティ「名前」を「選択」する必要があります。

"reduce"のようなもので、 "name"配列の値を選択します。

多分将来、サポートする言語が増えるでしょう。だから、各IDは各対応言語の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" 
    } 

    //... 
] 

Iがobjの内部のようでなければならないので、私はまた、このソリューションを適用する「説明」配列:

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

マップはオブジェクトを反復処理しますか? –

+0

こんにちは! Raj Nathaniはちょうど私の状況を解決しました。ありがとう! –

答えて

1

reduceを使用するのではなく、filterの操作を使用することをお勧めします。

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

うわー!できます!!!どうもありがとう!とても初心者ですみません、私はこれが複雑な問題ではないと思います。私は4ヶ月のようにJavascriptを勉強しています。 あなたは私にこれをたくさん教えてくれます!どうもありがとうございます! –

関連する問題