Я работаю над сайтом электронной коммерции.Я должен управлять изменениями продукта.Ответ REST API выглядит примерно так:
"variations": [
{
"attributeCombinations": [
{
"name": "Color",
"valueName": "GRIS"
},
{
"name": "Talle",
"valueName": "L"
}
]
},
{
"attributeCombinations": [
{
"name": "Color",
"valueName": "GRIS"
},
{
"name": "Talle",
"valueName": "XXL"
}
]
},
{
"attributeCombinations": [
{
"name": "Color",
"valueName": "Azul"
},
{
"name": "Talle",
"valueName": "M"
}
]
},
{
"attributeCombinations": [
{
"name": "Color",
"valueName": "GRIS"
},
{
"name": "Talle",
"valueName": "S"
}
]
},
{
"attributeCombinations": [
{
"name": "Color",
"valueName": "GRIS"
},
{
"name": "Talle",
"valueName": "XL"
}
]
},
{
"attributeCombinations": [
{
"name": "Color",
"valueName": "Azul"
},
{
"name": "Talle",
"valueName": "S"
}
]
},
{
"attributeCombinations": [
{
"name": "Color",
"valueName": "GRIS"
},
{
"name": "Talle",
"valueName": "M"
}
]
}
]
Этот JSON неэффективен для меня, чтобы работать на веб-интерфейсе.Сложно сгруппировать варианты по их типу (имени) и значениям (valueName), поскольку они находятся в разных «массивах массивов».
Окончательный результат должен выглядеть примерно так:
variations: [
{
name: 'Color',
values: ['Gris', 'Azul']
},
{
name: 'Talle',
values: ['S', 'M', 'L', 'XL', 'XXL']
}
]
Пока я достиг этого результата:
[
{ name: "Color", values: ["GRIS"] },
{ name: "Talle", values: ["L"] },
{ name: "Color", values: ["GRIS"] },
{ name: "Talle", values: ["XXL"] },
{ name: "Color", values: ["Azul"] },
{ name: "Talle", values: ["M"] },
{ name: "Color", values: ["GRIS"] },
{ name: "Talle", values: ["S"] },
{ name: "Color", values: ["GRIS"] },
{ name: "Talle", values: ["XL"] },
{ name: "Color", values: ["Azul"] },
{ name: "Talle", values: ["S"] },
{ name: "Color", values: ["GRIS"] },
{ name: "Talle", values: ["M"] }
]
На основе этого кода:
let variations = this.$page.product.variations;
let newArr = [];
variations.forEach(variation => {
newArr.push(
Object.values(
variation.attributeCombinations.reduce(
(result, { name, valueName }) => {
// Create new group
if (!result[name]) {
result[name] = {
name,
values: []
};
}
// Append to group
result[name].values.push(valueName);
return result;
},
{}
)
)
);
});
return newArr.reduce((acc, cur) => acc.concat(cur));