Есть объект.
var data = {
"podauschaya_linya_1_kontura_name": {
"Короткая посадочное": {
"Значение резьбы": "G 1\"",
"Диаметр отверстия": 30,
"Подходящая номенклатура из 1С": {
"Наименование": "Стоимость сверления отверстия AISI 304 (толщ. 2 мм.) 30",
},
"Цена": "36"
}
},
"podauschaya_linya_2_kontura_name": {
"Короткая посадочное": {
"Значение резьбы": "G 1\"",
"Диаметр отверстия": 30,
"Подходящая номенклатура из 1С": {
"Наименование": "Стоимость сверления отверстия AISI 304 (толщ. 2 мм.) 30",
},
"Цена": "36"
}
},
"obratnaya_linya_2_kontura_name": {
"Короткая посадочное": {
"Значение резьбы": "G 1\"",
"Диаметр отверстия": 30,
"Подходящая номенклатура из 1С": {
"Наименование": "Стоимость сверления отверстия AISI 304 (толщ. 2 мм.) 30",
},
"Цена": "36"
}
},
"obratnaya_linya_1_kontura_name": {
"Короткая посадочное": {
"Значение резьбы": "G 1\"",
"Диаметр отверстия": 30,
"Подходящая номенклатура из 1С": {
"Наименование": "Стоимость сверления отверстия AISI 304 (толщ. 2 мм.) 30",
},
"Цена": "36"
}
},
"podauschaya_linya_rezervnogo_kotla_name": {
"Короткая посадочное": {
"Значение резьбы": "G ¾\"",
"Диаметр отверстия": 25,
"Подходящая номенклатура из 1С": {
"Наименование": "Стоимость сверления отверстия AISI 304 (толщ. 2 мм.) 25",
},
"Цена": "30"
}
},
"obratnaya_linya_rezervnogo_kotla_name": {
"Короткая посадочное": {
"Значение резьбы": "G ¾\"",
"Диаметр отверстия": 25,
"Подходящая номенклатура из 1С": {
"Наименование": "Стоимость сверления отверстия AISI 304 (толщ. 2 мм.) 25",
},
"Цена": "30"
}
},
"kotlovoi_kontur_select_name": {
"Короткая посадочное слева_сверху": {
"Значение резьбы": "G 1\"",
"Диаметр отверстия": 30,
"Подходящая номенклатура из 1С": {
"Наименование": "Стоимость сверления отверстия AISI 304 (толщ. 2 мм.) 30",
},
"Цена": "36"
},
"Короткая посадочное слева_снизу": {
"Значение резьбы": "G 1\"",
"Диаметр отверстия": 30,
"Подходящая номенклатура из 1С": {
"Наименование": "Стоимость сверления отверстия AISI 304 (толщ. 2 мм.) 30",
},
"Цена": "36"
}
}
}
Понимаю что должен помочь Reduce, но запутался во вложенности.
var getCollectInformation = data => Object.keys(data).reduce( (result, key) =>{ ... }
/* Object.keys(data) даёт доступ к такой вложенности */
[
"podauschaya_linya_1_kontura_name",
"podauschaya_linya_2_kontura_name",
"podauschaya_linya_rezervnogo_kotla_name",
"obratnaya_linya_rezervnogo_kotla_name"
]
/* Object.keys(data) даёт доступ к такой вложенности */
А дальше идут однотипные объекты, к полям которых можно обращаться по именам.
Также можно воспользоваться методом Object.values
, который сразу возвращает значения объекта, а не только ключи.
Например:
var data = {
"podauschaya_linya_1_kontura_name": {
"Короткая посадочное": {
"Значение резьбы": "G 1\"",
"Диаметр отверстия": 30,
"Подходящая номенклатура из 1С": {
"Наименование": "Стоимость сверления отверстия AISI 304 (толщ. 2 мм.) 30",
},
"Цена": "36"
}
},
"podauschaya_linya_2_kontura_name": {
"Короткая посадочное": {
"Значение резьбы": "G 1\"",
"Диаметр отверстия": 30,
"Подходящая номенклатура из 1С": {
"Наименование": "Стоимость сверления отверстия AISI 304 (толщ. 2 мм.) 30",
},
"Цена": "36"
}
},
"podauschaya_linya_rezervnogo_kotla_name": {
"Короткая посадочное": {
"Значение резьбы": "G ¾\"",
"Диаметр отверстия": 25,
"Подходящая номенклатура из 1С": {
"Наименование": "Стоимость сверления отверстия AISI 304 (толщ. 2 мм.) 25",
},
"Цена": "30"
}
},
"obratnaya_linya_rezervnogo_kotla_name": {
"Короткая посадочное": {
"Значение резьбы": "G ¾\"",
"Диаметр отверстия": 25,
"Подходящая номенклатура из 1С": {
"Наименование": "Стоимость сверления отверстия AISI 304 (толщ. 2 мм.) 25",
},
"Цена": "30"
}
},
}
var res = Object.values(data).reduce((result, val) => {
var obj = val["Короткая посадочное"];
// для случае если имя "Короткая посадочное" может меняться
// var obj = Object.values(val)[0];
// либо с помощью `for`
// var obj;
// for(var i in val) {
// obj = val[i];
// break;
//}
var key = obj["Подходящая номенклатура из 1С"]["Наименование"];
if (!result[key]) {
result[key] = {
'Количество вхождений в объекте': 1,
"Значение резьбы": obj["Значение резьбы"],
'Цена': obj['Цена'],
};
} else {
result[key]['Количество вхождений в объекте'] += 1;
}
return result;
}, {});
console.log(res);
var data = {
"podauschaya_linya_1_kontura_name": {
"Короткая посадочное": {
"Значение резьбы": "G 1\"",
"Диаметр отверстия": 30,
"Подходящая номенклатура из 1С": {
"Наименование": "Стоимость сверления отверстия AISI 304 (толщ. 2 мм.) 30",
},
"Цена": "36"
}
},
"podauschaya_linya_2_kontura_name": {
"Короткая посадочное": {
"Значение резьбы": "G 1\"",
"Диаметр отверстия": 30,
"Подходящая номенклатура из 1С": {
"Наименование": "Стоимость сверления отверстия AISI 304 (толщ. 2 мм.) 30",
},
"Цена": "36"
}
},
"podauschaya_linya_rezervnogo_kotla_name": {
"Короткая посадочное": {
"Значение резьбы": "G ¾\"",
"Диаметр отверстия": 25,
"Подходящая номенклатура из 1С": {
"Наименование": "Стоимость сверления отверстия AISI 304 (толщ. 2 мм.) 25",
},
"Цена": "30"
}
},
"obratnaya_linya_rezervnogo_kotla_name": {
"Короткая посадочное": {
"Значение резьбы": "G ¾\"",
"Диаметр отверстия": 25,
"Подходящая номенклатура из 1С": {
"Наименование": "Стоимость сверления отверстия AISI 304 (толщ. 2 мм.) 25",
},
"Цена": "30"
}
},
};
var data1 = {};
for (var key in data) {
var subkey = Object.keys(data[key])[0];
var key1 = data[key][subkey]["Подходящая номенклатура из 1С"]["Наименование"];
if (data1[key1]) {
data1[key1]["Количество вхождений в объекте"] += 1;
} else {
data1[key1] = {
"Количество вхождений в объекте": 1,
"Значение резьбы": data[key][subkey]["Значение резьбы"],
"Цена": data[key][subkey]["Цена"]
};
}
}
console.log(data1);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Не могу разобраться, autoNumeric работает только на первый элемент содержащий класс float, как сделать что бы сработало на всех элементах имеющих...
Возможно ли запустить 2 PlayerEndpoint с разными ссылками на одной странице? https://doc-kurentoreadthedocs