Вы можете использовать замыкание над field
и использовать итеративный и рекурсивный подход для бесконечного вложенного buckets
.
var data = [{ name: "style", buckets: [{ count: 38243, ratio: 4.476200397255031, name: "romantic", md5: "257927a09632991b08877ef6d29bec00" }, { count: 14414, ratio: 1.6871048956942187, name: "retro", md5: "257927a09632991b08877ef6d29bec00" }] }, { name: "color", buckets: [{ count: 26219, ratio: 8.1271048953942982, name: "blue", md5: "257927a09632991b08877ef6d29bec00", buckets: [{ count: 11976, ratio: 3.1271048953942982, name: "lightblue", md5: "4457168314f0e9010d425f1d9db67937" }] }] }],
result = data.reduce((r, { name: field, buckets }) =>
buckets.reduce(function iter(s, { count, ratio, name, md5, buckets = [] }) {
s.push({ count, ratio, name, md5, field, label: [field, name].join(' = ') });
return buckets.reduce(iter, s);
}, r), []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Немного короче с параметрами покоя для объектов.Может потребоваться более новый JS или babeljs
var data = [{ name: "style", buckets: [{ count: 38243, ratio: 4.476200397255031, name: "romantic", md5: "257927a09632991b08877ef6d29bec00" }, { count: 14414, ratio: 1.6871048956942187, name: "retro", md5: "257927a09632991b08877ef6d29bec00" }] }, { name: "color", buckets: [{ count: 26219, ratio: 8.1271048953942982, name: "blue", md5: "257927a09632991b08877ef6d29bec00", buckets: [{ count: 11976, ratio: 3.1271048953942982, name: "lightblue", md5: "4457168314f0e9010d425f1d9db67937" }] }] }],
result = data.reduce((r, { name: field, buckets }) =>
buckets.reduce(function iter(s, { buckets = [], ...rest }) {
s.push({ ...rest, field, label: [field, rest.name].join(' = ') });
return buckets.reduce(iter, s);
}, r), []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }