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.我会将其分为多个步骤:
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?