我从javascript开始,遇到这个问题,我试图返回数据并与数据进行数组排列,但是当我在控制台日志中得到“ [[object Object] [object Object]””
这是我必须处理的数据
var MARKDATA = {
"SOR": {
"mark": [
{
"data": {
"2015": 21.680000,
"2016": 23.739999,
"2017": 23.760000
},
"markName": "swimming",
"markCode": "SWM"
},
{
"data": {
"2015": "",
"2016": 61.55429840,
"2017": 61.482299804
},
"markName": "running (time)",
"indicatorCode": "RM"
}
]
}
};
这就是我尝试的
const valuesArr= MARKDATA.SOR.mark;
let acum= '';
const showData = arr => {
const dataArr= arr.map(value => value.data).join('')
acum += dataArr;
};
showData(valuesArr);
console.log(acum)
我希望控制台日志返回并包含年份和对象数据的值的数组,我要做的是使用此数组通过reduce方法计算每个数据的平均值。
或者,如果有人知道一种更好的方法来获取对象数据的平均值,我将对其进行估算
答案 0 :(得分:2)
您当前的代码正在显式地构建字符串:
acum
)初始化''
join('')
操作的结果调用map
(创建一个字符串)由于map
正在创建对象数组,因此在taht数组上调用join
会隐式在这些对象上调用toString
。在这种情况下,没有特殊toString
行为的对象将返回"[object Object]"
。
如果您想要一个data
内容的数组,则需要在数组级别进行操作:
let acum = []; // <== An array
const showData = arr => {
const dataArr= arr.map(value => value.data); // <== No join('')
acum.push(...dataArr); // <== Appending to the array
};
showData(valuesArr);
console.log(acum);
这是最小的更改版本,但是没有理由创建那些临时数组(返回值map
),也没有理由使用showData
函数。只需使用for-of
循环即可。您还可以包括解构。所以:
let acum = [];
for (const {data} of valuesArr) {
acum.push(...data);
}
console.log(acum);
您可以将它塞入reduce
中(因为您可以将任何数组操作塞入reduce
中),但它不会为您带来任何好处:
let acum = valuesArr.reduce((a, {data}) => {
a.push(...data);
return a;
}, []);
console.log(acum);
或者(但这仍然毫无意义地创建了一个额外的数组),您可以使用proposal-but-still-Stage-3 Array.prototype.flat
:
let acum = valueArr.map(({data}) => data).flat();
console.log(acum);