Помогите с циклом. Туплю. Есть объект:
{
'done': true,
'brands': {
'models': [
{
'id': 0,
'brands': [
{
'mod': [
{
'brand_name': 'audi_a8_long'
}
]
},
{
'mod': [
{
'brand_name': 'audi_a4'
}
]
},
{
'mod': [
{
'brand_name': 'porsche_911'
}
]
}
]
},
{
'id': 1,
'brands': [
{
'mod': [
{
'brand_name': 'jaguar_xjr'
}
]
},
{
'mod': [
{
'brand_name': 'jaguar_xjr'
}
]
},
{
'mod': [
{
'brand_name': 'audi_a8_long'
}
]
},
{
'mod': [
{
'brand_name': 'audi_a6'
}
]
}
]
}
]
}
};
суть такая, есть объект cars
, в котором есть ключ models
с массивами объектов brands
, этих объектов brands
неизвестное количество, то есть может быть 1 или овер 9999999. в каждом brands
есть массив с объектом mod
в котором n-brand_names. Нужно вывести в консоль содержимое этого ужаса в формате: audi_a8_long - 2шт, jaguar_xjr -1 шт
и так далее. то есть даже количество mod
и brand_names
неизвестно. Это ответ от сервера. я уже третий день пытаюсь что-то сделать с циклами. но выходит только выводит в консоль список в виде audi_a8_long - 1, audi_a8_long - 1, jaguar_xjr-1
, и так далее, то есть вывожу как баран каждый brand_name
отдельно.
let object = {
'done': true,
'guid_image': {
'raw_bbox': [
{
'bbox': [
2017,
1583,
2412,
2836,
0,
-1
],
'id': '211'
},
{
'bbox': [
688,
462,
1023,
1506,
1,
-1
],
'id': '27'
},
{
'bbox': [
1763,
448,
2071,
1586,
2,
-1
],
'id': '27'
},
{
'bbox': [
1715,
1597,
2052,
2723,
3,
-1
],
'id': '36'
},
{
'bbox': [
980,
461,
1271,
1499,
4,
-1
],
'id': '27'
},
{
'bbox': [
1226,
473,
1522,
1528,
5,
-1
],
'id': '27'
},
{
'bbox': [
139,
437,
506,
1484,
6,
-1
],
'id': '27'
},
{
'bbox': [
412,
448,
728,
1484,
7,
-1
],
'id': '27'
}
,
{
'bbox': [
2043,
507,
2324,
1513,
8,
-1
],
'id': '35'
},
{
'bbox': [
1490,
444,
1824,
1529,
9,
-1
],
'id': '27'
},
{
'bbox': [
1406,
1621,
1746,
2695,
10,
-1
],
'id': '36'
},
{
'bbox': [
656,
1627,
1028,
2721,
11,
-1
],
'id': '28'
},
{
'bbox': [
1104,
1631,
1423,
2707,
12,
-1
],
'id': '28'
},
{
'bbox': [
338,
1599,
674,
2693,
13,
-1
],
'id': '28'
},
{
'bbox': [
51,
1722,
352,
2703,
14,
-1
],
'id': '218'
}
],
'shelfs': [
{
'bbox': [
0.0,
437.0,
2448.0,
1586.0
],
'id': 0,
'mean_width': null,
'places': [
{
'amount': 1,
'bbox': [
139,
437,
506,
1484
],
'id': 0,
'skus': [
{
'bbox': [
139,
437,
506,
1484,
6,
-1
],
'brand_name': 'ferrari_ff',
'confidence_complex': 0.99997,
'confidence_id_cch_category': 1.0,
'confidence_id_cch_cco': 1.0,
'confidence_id_cch_sku': 1.0
}
]
},
{
'amount': 1,
'bbox': [
412,
448,
728,
1484
],
'id': 1,
'skus': [
{
'bbox': [
412,
448,
728,
1484,
7,
-1
],
'brand_name': 'bmw_525',
'confidence_complex': 0.99997,
'confidence_id_cch_category': 1.0,
'confidence_id_cch_cco': 1.0,
'confidence_id_cch_sku': 1.0
}
]
},
{
'amount': 1,
'bbox': [
688,
462,
1023,
1506
],
'id': 2,
'skus': [
{
'bbox': [
688,
462,
1023,
1506,
1,
-1
],
'brand_name': 'bmw_m3',
'confidence_complex': 0.99999,
'confidence_id_cch_category': 1.0,
'confidence_id_cch_cco': 1.0,
'confidence_id_cch_sku': 1.0
}
]
},
{
'amount': 1,
'bbox': [
980,
461,
1271,
1499
],
'id': 3,
'skus': [
{
'bbox': [
980,
461,
1271,
1499,
4,
-1
],
'brand_name': 'audi_a3',
'confidence_complex': 0.99999,
'confidence_id_cch_category': 1.0,
'confidence_id_cch_cco': 1.0,
'confidence_id_cch_sku': 1.0
}
]
},
{
'amount': 1,
'bbox': [
1226,
473,
1522,
1528
],
'id': 4,
'skus': [
{
'bbox': [
1226,
473,
1522,
1528,
5,
-1
],
'brand_name': 'audi_a3',
'confidence_complex': 1.0,
'confidence_id_cch_category': 1.0,
'confidence_id_cch_cco': 1.0,
'confidence_id_cch_sku': 1.0
}
]
},
{
'amount': 1,
'bbox': [
1490,
444,
1824,
1529
],
'id': 5,
'skus': [
{
'bbox': [
1490,
444,
1824,
1529,
9,
-1
],
'brand_name': 'bmw_525',
'confidence_complex': 0.99999,
'confidence_id_cch_category': 1.0,
'confidence_id_cch_cco': 1.0,
'confidence_id_cch_sku': 1.0
}
]
},
{
'amount': 1,
'bbox': [
1763,
448,
2071,
1586
],
'id': 6,
'skus': [
{
'bbox': [
1763,
448,
2071,
1586,
2,
-1
],
'brand_name': 'audi_a8_long',
'confidence_complex': 0.99999,
'confidence_id_cch_category': 1.0,
'confidence_id_cch_cco': 1.0,
'confidence_id_cch_sku': 1.0
}
]
},
{
'amount': 1,
'bbox': [
2043,
507,
2324,
1513
],
'id': 7,
'skus': [
{
'bbox': [
2043,
507,
2324,
1513,
8,
-1
],
'brand_name': 'audi_a1',
'confidence_complex': 0.99999,
'confidence_id_cch_category': 1.0,
'confidence_id_cch_sku': 1.0
}
]
}
]
},
{
'bbox': [
0.0,
1583.0,
2448.0,
2836.0
],
'id': 1,
'mean_width': null,
'places': [
{
'amount': 1,
'bbox': [
51,
1722,
352,
2703
],
'id': 0,
'skus': [
{
'bbox': [
51,
1722,
352,
2703,
14,
-1
],
'brand_name': 'other_ssd',
'confidence_id_cch_category': 0.93
}
]
},
{
'amount': 1,
'bbox': [
338,
1599,
674,
2693
],
'id': 1,
'skus': [
{
'bbox': [
338,
1599,
674,
2693,
13,
-1
],
'brand_name': 'bmw_525',
'confidence_complex': 0.99999,
'confidence_id_cch_category': 1.0,
'confidence_id_cch_cco': 1.0,
'confidence_id_cch_sku': 1.0
}
]
},
{
'amount': 1,
'bbox': [
656,
1627,
1028,
2721
],
'id': 2,
'skus': [
{
'bbox': [
656,
1627,
1028,
2721,
11,
-1
],
'brand_name': 'jaguar_xjr',
'confidence_complex': 1.0,
'confidence_id_cch_category': 1.0,
'confidence_id_cch_cco': 1.0,
'confidence_id_cch_sku': 1.0
}
]
},
{
'amount': 1,
'bbox': [
1104,
1631,
1423,
2707
],
'id': 3,
'skus': [
{
'bbox': [
1104,
1631,
1423,
2707,
12,
-1
],
'brand_name': 'bmw_m3',
'confidence_complex': 0.99999,
'confidence_id_cch_category': 1.0,
'confidence_id_cch_cco': 1.0,
'confidence_id_cch_sku': 1.0
}
]
},
{
'amount': 1,
'bbox': [
1406,
1621,
1746,
2695
],
'id': 4,
'skus': [
{
'bbox': [
1406,
1621,
1746,
2695,
10,
-1
],
'brand_name': 'audi_a1',
'confidence_complex': 1.0,
'confidence_id_cch_category': 1.0,
'confidence_id_cch_sku': 1.0
}
]
},
{
'amount': 1,
'bbox': [
1715,
1597,
2052,
2723
],
'id': 5,
'skus': [
{
'bbox': [
1715,
1597,
2052,
2723,
3,
-1
],
'brand_name': 'bmw_m3',
'confidence_complex': 1.0,
'confidence_id_cch_category': 1.0,
'confidence_id_cch_sku': 1.0
}
]
},
{
'amount': 1,
'bbox': [
2017,
1583,
2412,
2836
],
'id': 6,
'skus': [
{
'bbox': [
2017,
1583,
2412,
2836,
0,
-1
],
'brand_name': 'audi_a1',
'confidence_complex': 0.989604,
'confidence_id_cch_category': 1.0,
'confidence_id_cch_sku': 0.99,
'confidence_id_cch_so': 0.54
}
]
}
]
}
]
}
};
let numbersOfBrands = {};
function addBrand(brand) {
if (!(brand in numbersOfBrands)) {
numbersOfBrands[brand] = 0;
}
++numbersOfBrands[brand];
}
let array = object.guid_image.shelfs;
for (let element1 of array) {
for (let element2 of element1.places) {
for (let element3 of element2.skus) {
addBrand(element3.brand_name);
}
}
}
for (let brand of Object.keys(numbersOfBrands)) {
console.log(`бренд ${brand} --- ${numbersOfBrands[brand]} штук`);
}
console.log('Суммарное число:' + Object.values(numbersOfBrands).reduce((a, b) => a + b, 0));
Здесь могут помочь функции Object.keys()
, Object.values()
и цикл for..of
. Советую прочитать статьи по ссылкам.
Возможная реализация:
let object = {
'done': true,
'brands': {
'models': [
{
'id': 0,
'brands': [
{
'mod': [
{
'brand_name': 'audi_a8_long'
}
]
},
{
'mod': [
{
'brand_name': 'audi_a4'
}
]
},
{
'mod': [
{
'brand_name': 'porsche_911'
}
]
}
]
},
{
'id': 1,
'brands': [
{
'mod': [
{
'brand_name': 'jaguar_xjr'
}
]
},
{
'mod': [
{
'brand_name': 'jaguar_xjr'
}
]
},
{
'skus': [
{
'brand_name': 'audi_a8_long'
}
]
},
{
'skus': [
{
'brand_name': 'audi_a6'
}
]
}
]
}
]
}
};
let numbersOfBrands = {};
function addBrand(brand) {
if (!(brand in numbersOfBrands)) {
numbersOfBrands[brand] = 0;
}
++numbersOfBrands[brand];
}
let array = object.brands.models;
for (let model of array) {
for (let brand of model.brands) {
for (let element of Object.values(brand)) {
for (let elementInner of element) {
addBrand(elementInner.brand_name);
}
}
}
}
for (let brand of Object.keys(numbersOfBrands)) {
console.log(`бренд ${brand} --- ${numbersOfBrands[brand]} штук`);
}
В javascript объекты не могут иметь одинаковых ключей. Иными словами, все ключи объекта уникальны. Скорее всего у вас есть массив. К сожалению, из-за проблемы нескольких ключей ваше описание не очень понятно, однако могу предложить решение в случае, если исходный объект имеет вид
let array = [
{brand: 'Ауди А5'},
{brand: 'Ауди А3'},
{brand: 'Ауди А5'},
{brand: 'БМВ 5'}
];
Код:
let array = [
{brand: 'Ауди А5'},
{brand: 'Ауди А3'},
{brand: 'Ауди А5'},
{brand: 'БМВ 5'}
];
let numbersOfBrands = {};
for (let element of array) {
if (!(element.brand in numbersOfBrands)) {
numbersOfBrands[element.brand] = 0;
}
++numbersOfBrands[element.brand];
}
for (let brand of Object.keys(numbersOfBrands)) {
console.log(`бренд ${brand} --- ${numbersOfBrands[brand]} штук`);
}
Для объекта выше будет выведено:
бренд Ауди А5 --- 2 штук
бренд Ауди А3 --- 1 штук
бренд БМВ 5 --- 1 штук
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Ситуация такая, добавляю записи в БД с перезагрузкой, решил реализовать на AJAX, но тут ситуация такая что тут мне нужно передать массив
При создании иконочных шрифтов на сайте Icomoon заметил спецсимвол который не работаетВ папки demo тоже не работают эти спецсимволы