Javascript 如何在JS中展平数组?

Javascript 如何在JS中展平数组?,javascript,Javascript,我有如下数据: const data = [{ ratings: [ { rating: 5 } ], counts: [ { count: 100 } ], }]; 我想把它展平,从某种意义上说,我想摆脱数组,只拥有对象,最终结果是: const data = { ratings: { rating: 5 }, counts: { count: 100 }, }; 我试着做类似的事情,但这是错误的,我相信我把事情复杂化了 const flatten = data

我有如下数据:

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;
                }, {})
              }

有什么想法吗?

您可以使用
reduce
方法创建递归函数,将所有数组转换为对象,假设这些数组中只有对象

const data=[{ratings:[{rating:5}],counts:[{count:100}]}];
函数展平(arr){
返回arr.reduce((r,e)=>{
const obj=Object.assign({},e);
for(让p在obj中){
if(Array.isArray(obj[p])){
obj[p]=展平(obj[p])
}
}
返回Object.assign(r,obj)
}, {})
}
console.log(展平(数据))
请检查:

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.log(flatten(data));
请检查@CodePen

如果数据可能来自
JSON.parse

var json=json.stringify([{ratings:[{rating:5}],counts:[{count:100}]}])
var result=JSON.parse(JSON,(k,v)=>v[0]| | v)

console.log(result)
是否每个数组只有一个对象?@Eddie否,有些数组有更多对象。但是,基本上所有数组都由单个元素组成,而元素本身就是一个对象。