function join_aggregate(data_, opsOrd_, opsFunc_, aggKey_=d=>d["titre"]) {
function apply_join_function(data__, aggFld__, aggFun__, aggLbl__, aggKey__) {
let _data = Object.values(deep_copy(data__))
let _gp = d3a.group(_data, aggKey__);
let _vArr = [..._gp.values()],
_kArr = [..._gp.keys()];
let resArr = _vArr.map(
function(gpObjs___) {
return gpObjs___.map(
function(obj____, _, gpObjs____){
return Object.assign(obj____, ({[aggLbl__]: aggFun__(gpObjs____,aggFld__)}))
}
)
}
)
return resArr.flat()
}
return opsOrd_.reduce(
function(acc__, op__){
return apply_join_function(acc__, op__.field, opsFunc_[op__.op], op__.as, aggKey_)
},
data_)
}