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否,有些数组有更多对象。但是,基本上所有数组都由单个元素组成,而元素本身就是一个对象。