![](/img/trans.png)
[英]console.log returns [Object] when object is in multiple other objects
[英]console.log returns [object Object]
我从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方法计算每个数据的平均值。
或者,如果有人知道一种更好的方法来获取对象数据的平均值,我将对其进行说明
您当前的代码正在显式构建一个字符串:
acum
有一个字符串( ''
) map
操作的结果上调用join('')
(创建一个字符串) 由于map
正在创建对象数组,因此在taht数组上调用join
隐式在那些对象上调用toString
。 在这种情况下,不具有特殊toString
行为的"[object Object]"
将返回"[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);
或者,(但这仍然毫无意义地创建了一个额外的数组),您可以使用Array.prototype.flat
-but-still-Stage-3 Array.prototype.flat
:
let acum = valueArr.map(({data}) => data).flat();
console.log(acum);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.