Найти одинаковые значения ключей

334
31 мая 2017, 04:54

Помогите с циклом. Туплю. Есть объект:

{
    '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 отдельно.

Answer 1
Ещё более новый ответ (30.05.2017 12:25)

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 штук
READ ALSO
как передать массив через AJAX?

как передать массив через AJAX?

Ситуация такая, добавляю записи в БД с перезагрузкой, решил реализовать на AJAX, но тут ситуация такая что тут мне нужно передать массив

538
Подставляются одинаковые значения autocomplete

Подставляются одинаковые значения autocomplete

Динамическая таблица по клику выпадают поля

412
Почему не работают спецсимволы у Icomoon?

Почему не работают спецсимволы у Icomoon?

При создании иконочных шрифтов на сайте Icomoon заметил спецсимвол который не работаетВ папки demo тоже не работают эти спецсимволы

492
Анимация блоков на js

Анимация блоков на js

Всем приветИмеется блок, внутри которого 100 блоков

499