Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将JSON数据转换/映射到不同的模型_Javascript_Json - Fatal编程技术网

Javascript 如何将JSON数据转换/映射到不同的模型

Javascript 如何将JSON数据转换/映射到不同的模型,javascript,json,Javascript,Json,我正试图思考如何转换一些数据。它是一个对象数组,每个对象包含一个项目数组,每个项目都是颜色和大小的唯一组合 [ { "style": "styleName_01", "someOtherKey": "", "skus": [ { "sku": "001", "color

我正试图思考如何转换一些数据。它是一个对象数组,每个对象包含一个项目数组,每个项目都是颜色和大小的唯一组合

[
    {
        "style": "styleName_01",
        "someOtherKey": "",
        "skus": [
            { "sku": "001", "color": "COLOR_01", "size": "SIZE_08" },
            { "sku": "002", "color": "COLOR_02", "size": "SIZE_07" },
            { "sku": "003", "color": "COLOR_02", "size": "SIZE_08" },
            { "sku": "004", "color": "COLOR_02", "size": "SIZE_12" }
        ]
    },
    {
        "style": "styleName_02",
        "someOtherKey": "",
        "skus": [
            { "sku": "005", "color": "COLOR_01", "size": "SIZE_05" },
            { "sku": "006", "color": "COLOR_03", "size": "SIZE_07" },
            { "sku": "007", "color": "COLOR_03", "size": "SIZE_08" },
            { "sku": "008", "color": "COLOR_02", "size": "SIZE_04" }
        ]
    }
]
首先按颜色选择产品,该颜色会过滤到颜色中可用的大小,因此我尝试获取SKU循环中出现的每种颜色,然后查找该颜色中出现大小的所有项目,即

[
    {
        "style": "",
        "someOtherKey": "",
        "sku": "001",
        "color": "COLOR_01",
        "sizes": [ "SIZE_08", "SIZE_05" ]
    },
    {
        "style": "",
        "someOtherKey": "",
        "sku": "002",
        "color": "COLOR_02",
        "sizes": [ "SIZE_07", "SIZE_08", "SIZE_12", "SIZE_04"  ]
    },
    {
        "style": "",
        "someOtherKey": "",
        "sku": "003",
        "color": "COLOR_03",
        "sizes": [ "SIZE_07", "SIZE_08" ]
    }
]
我能够构建sku对象,但我需要一些指导,以了解如何在需要时仅获取(唯一)大小值:

let newSkus = []

let newSku = {
    "sku": "",
    "color": "",
    "sizes": []
}

for (style of data) { // for each style object ...
    let numSkus = style.skus.length;

    for (let sku = numSkus - 1; sku >= 0; sku--) { // for each item in items[]

        if (newSku.color !== `${style.skus[sku].color}`) {
            newSku.color = `${style.skus[sku].color}`;
            newSku.sizes.push(`${style.skus[sku].frameSize}`);
        }
        else {}

        console.log("newSku", newSku); // wrong; getting all sizes from all items
提前感谢您的建议


威士忌T.

我会将其分为多个步骤:

  • 创建所有SKU的数组(因为我们不关心它们属于哪个样式名称)
  • 按颜色分组(并将大小合并到单个阵列)
  • 将其转换为所需格式
  • 您可以在控制台中看到每个步骤的输出:

    const数据=[
    {
    “样式”:“样式名称\u 01”,
    “SKU”:[
    {“sku”:“001”,“color”:“color_01”,“size”:“size_08”},
    {“sku”:“002”,“颜色”:“颜色02”,“大小”:“大小07”},
    {“sku”:“003”,“color”:“color_02”,“size”:“size_08”},
    {“sku”:“004”,“颜色”:“颜色02”,“大小”:“大小12”}
    ]
    },
    {
    “样式”:“样式名称_02”,
    “SKU”:[
    {“sku”:“005”,“color”:“color_01”,“size”:“size_05”},
    {“sku”:“006”,“颜色”:“颜色03”,“大小”:“大小07”},
    {“sku”:“007”,“颜色”:“颜色03”,“大小”:“大小08”},
    {“sku”:“008”,“颜色”:“颜色02”,“大小”:“大小04”}
    ]
    }
    ]
    //扁平化为一组SKU
    const skus=data.flatMap(style=>style.skus)
    console.log('SKU',SKU)
    //按颜色分组
    const colorsObj=库存单位减少((颜色,库存单位)=>{
    如果(!colors.hasOwnProperty(sku.color))
    颜色[sku.color]=[]//如果需要唯一值,请使用Set
    颜色[sku.color].push(sku.size)
    返回颜色
    }, {})
    console.log('colorsObj',colorsObj)
    //从对象项创建数组
    const colorsArr=Object.entries(colorsObj.map)([color,size],i)=>{
    返回{
    sku:我,
    颜色
    尺寸
    }
    })
    
    log('colorsar',colorsar)
    我认为您方法中的一个问题是,所有颜色都使用相同的
    newSku
    变量,因此附加到相同的
    大小
    数组中。如果每种颜色使用一个对象,则可能需要对其进行编辑,以澄清实际上还需要原始数据模型中的其他关键点(A_A注释如下:“因为我们不关心它们属于哪个样式名称”,因为我没有澄清,我不确定您想要的结果是什么样的,特别是您希望结果中的其他信息如何。例如,颜色\u 01同时包含在styleName\u 01和styleName\u 02中。结果现在是否应该包含数组
    styles:[styleName\u 01,styleName\u 02]
    ?如果没有,还有什么?Thx A_A.在期望的结果中,确实存在多个SKU共同的样式名称,因为它们实际上是指一个样式组。我意识到我在描述这个问题方面做得很糟糕。目标结果如下:[{//style obj“styleCode”:(不唯一)”,“collectionName”:(不唯一)”,“collectionID”:(非唯一)”,“颜色”:[{“名称”:“黑色”,“upc”:[{“upc”:“123”,“尺寸”:“01”,“重量”:“价格”:3.99},{“upc”:“246”,“尺寸”:“02”,“重量”:“价格”:3.99}//upc}//colors}]干杯汉克斯A_A。我一直在想如何最好地将给定数据模型中的其他键和值包含在SKU数组中。我想我可以使用.map,但这会变得非常粗糙,并且会有很多8-9键的循环…您能建议如何在您首先映射数据的位置执行此操作吗。SKU?