JavaScript - 基于数组计算值

时间:2016-06-15 15:17:53

标签: javascript arrays

我有一个数组,如下图所示,其中包含一些值,我想在一个单独的数组上进行一些计算。

这是我正在使用的数组和数据的一个示例:

Original Array

我想将此数据推送到名为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)
            });
        }

enter image description here

3 个答案:

答案 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);