#javascript #arrays
#javascript #массивы
Вопрос:
Мне нужна помощь, я хочу преобразовать массив в объект и подсчитать дубликаты каждого размера, и я надеюсь, что это принесет этот результат:
{
"BLACK": {
"XXS": 1,
"M": 1,
"L": 1,
"XL": 2 "},
"WHITE": {
"XXS": 1,
...
}
Я пытался использовать reduce и split, но он возвращает примерно так:
const products = ["black-XXS", "black-M", "black-L", "black-XL", "black-XL", "white-XXS", "white-L", "red-M "," blue-2XL "," blue-2XL "," blue-2XL "]
var result = products.reduce ((prev, cur) => {
color = cur.split ("-") [0]
size = cur.split ("-") [1]
// prev [size] = (prev [size] || 0) 1
previous [color] = {[size]: ([size] || 0) 1}
// prev [color] = {[size]: (prev [size] || 0) 1}
// {[color] = {[size]: ([size] || 0) 1}}
// console.log (previous)
return prev;
}, {});
Result = {"black": {"XL": "XL1"}, "white": {"L": "L1"}, "red": {"M": "M1"}, "blue": { "2XL": "2XL1"}}
Ответ №1:
Сначала вам нужно явно создать внешний объект, если он еще не существует, как отдельный оператор. Затем вы можете увеличить для него возможно существующее свойство size:
const products = ["black-XXS", "black-M", "black-L", "black-XL", "black-XL", "white-XXS", "white-L", "red-M "," blue-2XL "," blue-2XL "," blue-2XL "]
const productsByColor = {};
for (const product of products) {
const [color, size] = product.toUpperCase().split('-');
if (!productsByColor[color]) {
productsByColor[color] = {};
}
productsByColor[color][size] = (productsByColor[color][size] || 0) 1;
}
console.log(productsByColor);
Ответ №2:
Я сделал это немного по-другому, но CertainPerformance прав, сначала вам нужно определить свой пустой объект. Я бы также посоветовал вам убедиться, что каждый элемент в вашем массиве соответствует аналогичному формату. Например, внутри строки есть пробелы " blue-2XL "
.
Вот как я бы это сделал:
const products = ["black-XXS", "black-M", "black-L", "black-XL", "black-XL", "white-XXS", "white-L", "red-M", "blue-2XL", "blue-2XL", "blue-2XL"]
const hash = {};
products.forEach(item => {
let color = item.split("-")[0];
let size = item.split("-")[1];
if(!hash[color]) {hash[color] = {}};
if(!hash[color][size]) {hash[color][size] = 1} else {hash[color][size] = hash[color][size] 1};
});
Если console.log(hash);
вы должны иметь:
{ black: { XXS: 1, M: 1, L: 1, XL: 2 },
white: { XXS: 1, L: 1 },
red: { M: 1 },
blue: { '2XL': 3 } }