我有一个数组,如下图所示,其中包含一些值,我想在一个单独的数组上进行一些计算。
这是我正在使用的数组和数据的一个示例:
我想将此数据推送到名为formatted的数组中。此数组必须包含以下信息:
名称 - 取自原始数组的名称
min - 原始数组中的最低值
max - 原始数组中的最大值
Q1 - 这是通过添加p30和p40值并除以2来从原始数组计算的下四分位
Q4 - 这是上四分位数值,通过将p70和p80值相加并除以2来计算
中位数 - 这是通过将p50和p60值加在一起并除以2来计算的
这是我试图解决这个问题的一个例子,但如下所示,我对每个值都有错误:
var formated = [];
for(var i=0; i < final.length; i++) {
formated.push({
name: final[i].name,
min: final[i][0],
max: final[i].length -1,
Q1: (final[1] + final[2] / 2),
Q2: (final[5] + final[6] / 2),
meidan: (final[3] + final[4] / 2)
});
}
答案 0 :(得分:2)
假设所有对象始终具有相同的p值,这就是您所需要的:
var formated = [];
for(var i=0; i < final.length; i++) {
formated.push({
name: final[i].name,
min: final[i].p20,
max: final[i].p90,
Q1: ((final[i].p30 + final[i].p40) / 2),
Q2: ((final[i].p70 + final[i].p80) / 2),
median: ((final[i].p50 + final[i].p60) / 2)
});
}
上述更优雅的版本,使用Array.prototype.map()
:
var formated = final.map(function(item){
return {
name: item.name,
min: item.p20,
max: item.p90,
Q1: ((item.p30 + item.p40) / 2),
Q2: ((item.p70 + item.p80) / 2),
median: ((item.p50 + item.p60) / 2)
};
});
答案 1 :(得分:1)
你有不同命名的对象。
你叫什么
final[i][0]
应该像
final[i].p20
或类似的。
对于所有其他引用也是如此,final[i]
中的实际上不存在属性0
。因此final[i][0]
为undefined
。
答案 2 :(得分:1)
您可以使用map
功能。 Map
返回一个新数组:
const array = [
{name : "0006", p20 : 13367.8, p30: 15654.2, p40 : 17199.8, p50 : 18715, p60 : 20285.4, p70 : 22654.6, p80 : 24910.2, p90 : 30394.2}
];
var formated = array.map(el=>({
name: el.name,
min: el.p20,
max: el.p90,
Q1: ((el.p30 + el.p40) / 2),
Q2: ((el.p70 + el.p80) / 2),
median: ((el.p50 + el.p60) / 2)
}));
console.log(formated);