簡體   English   中英

選擇帶有數組的對象的道具

[英]Select a prop of an object with arrays

所以,我有這些數據來自 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 將是“產品”>“名稱”> ID> 2>值>字符串。

這就像“減少”並從“名稱”數組中選擇一個值。

也許將來會支持更多的語言。 因此,每個 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"
    }

    //...
]

“描述”數組我也將應用這個解決方案,所以我在 obj 中應該是這樣的:

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

我建議使用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"),
    };
});

該代碼可以使用您在此 jsbin 中提供的“JsonCategoriaHot”示例數據運行: http ://jsbin.com/zapimineje/edit?js,console,output

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM