Вы можете взять рекурсивную функцию, которая разделяет все пары ключ / значение, и построить новый декартовой продукт путем итерации значений, если массив с объектами снова вызывает getCartesian
и создает новые объекты.
Ключидолжно иметь то же имя, что и позже в наборе результатов.
function getCartesian(object) {
return Object.entries(object).reduce((r, [k, v]) => {
var temp = [];
r.forEach(s =>
(Array.isArray(v) ? v : [v]).forEach(w =>
(w && typeof w === 'object' ? getCartesian(w) : [w]).forEach(x =>
temp.push(Object.assign({}, s, { [k]: x }))
)
)
);
return temp;
}, [{}]);
}
var data = { id: ['11', '12', '13', '14'], cat: 1 };
console.log(getCartesian(data));
.as-console-wrapper { max-height: 100% !important; top: 0; }