У меня есть следующие данные:
const data = [{
ratings: [ { rating: 5 } ],
counts: [ { count: 100 } ],
}];
И я хочу сгладить это в том смысле, что я хочу избавиться от массивов и иметь только объекты, а конечный результат будет:
const data = {
ratings: { rating: 5 },
counts: { count: 100 },
};
Я пытался сделать что-то подобное, но это неправильно, и я считаю, что слишком усложняю это.
const flatten = data => {
return data.reduce((r, { ...children }) => {
Object.assign(children, r);
if (children) Object.assign(flatten(...Object.values(children)), r);
return r;
}, {})
}
Любые идеи?
@ Эдди Нет, у некоторых есть еще. Но в основном все массивы состоят из одного элемента, который сам по себе является объектом.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете создать рекурсивную функцию с методом reduce, чтобы превратить все массивы в объекты, если у вас есть только объекты в этих массивах.
const data = [{ratings: [ { rating: 5 } ],counts: [ { count: 100 } ]}];
function flatten(arr) {
return arr.reduce((r, e) => {
const obj = Object.assign({}, e);
for (let p in obj) {
if (Array.isArray(obj[p])) {
obj[p] = flatten(obj[p])
}
}
return Object.assign(r, obj)
}, {})
}
console.info(flatten(data))Пожалуйста, проверьте:
var data = [{ratings: [ { rating: 5 } ], counts: [ { count: 100 } ]}];
var flatten = function(data) {
if (Array.isArray(data)) {
data = data[0];
for (var key in data) data[key] = flatten(data[key]);
}
return data;
}
console.info(flatten(data));
Пожалуйста, проверьте @ CodePen https://codepen.io/animatedcreativity/pen/842e17d2b9f83bc415513f937fc29be8
Если случайно данные получены из JSON.parse:
var json = JSON.stringify( [{ratings:[{rating: 5}], counts:[{count: 100}]}] )
var result = JSON.parse(json, (k, v) => v[0] || v)
console.info( result )
Есть ли только один объект в каждом массиве?