Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用一些非数值从数组计算最大值_Javascript_D3.js - Fatal编程技术网

Javascript 使用一些非数值从数组计算最大值

Javascript 使用一些非数值从数组计算最大值,javascript,d3.js,Javascript,D3.js,我想计算从.csv文件导入的15分钟数据的最大值。文件中的每一行都包含来自不同日期(“日期”)的不同来源(“ID”)的15分钟数据,但我的分析不需要额外的列(“类”、“样本”、“通道”) 我研究了使用d3.group,但它似乎不是一种正确的方法,因为它有五个键值(每个非数值对应一个键值) 导入数据如下所示: [ { "ID": "10D1012B", "Class": "R", "Sample": "135_OLD", "Channel": "1",

我想计算从.csv文件导入的15分钟数据的最大值。文件中的每一行都包含来自不同日期(
“日期”
)的不同来源(
“ID”
)的15分钟数据,但我的分析不需要额外的列(
“类”、“样本”、“通道”

我研究了使用d3.group,但它似乎不是一种正确的方法,因为它有五个键值(每个非数值对应一个键值)

导入数据如下所示:

[
  {
    "ID": "10D1012B",
    "Class": "R",
    "Sample": "135_OLD",
    "Channel": "1",
    "Date": "1/1/2019",
    "00:15": "0.48",
    "00:30": "0.6",
    "00:45": "0.896",
    "01:00": "0.712",
    "01:15": "1.12",
          ...
    "23:00": "0.48",
    "23:15": "0.6",
    "23:30": "0.624",
    "23:45": "0.552",
    "00:00": "0.704"
  },
  {
    "ID": "10D1040B",
    "Class": "R",
    "Sample": "135_OLD",
    "Channel": "1",
    "Date": "1/2/2019",
    "00:15": "1.016",
         ...
    "23:30": "0.632",
    "23:45": "0.72",
    "00:00": "0.776"
  }
]

我想计算每行数据(ID、日期对)的最大值,这样我就可以用它来创建图表比例。我不清楚在计算最大值时如何排除非数值列。

您有两个问题:第一,
d3.max
在同一数组中遍历不同的对象。。。但是,您需要遍历同一对象中的不同值。其次,您有一些数值,比如
“Channel”
属性,您也不想包含这些数值。所以,事情并不像在属性中找到所有的数值那么简单

话虽如此,我的建议是:设置一个不想检查的属性名或键的列表

const nonNeededKeys = ["ID", "Class", "Sample", "Channel", "Date"];
。。。然后对数组中每个对象中的所有其他键使用
d3.max

data.forEach(function(row) {
  const keys = d3.keys(row).filter(function(d) {
    return nonNeededKeys.indexOf(d) === -1;
  });
  row.maxValue = d3.max(keys.map(function(d) {
    return +row[d]
  }))
});
在这里,您可以看到,我为每个对象创建了一个名为
maxValue
的新属性

以下是演示:

const数据=[{
“ID”:“10D1012B”,
“类”:“R”,
“样本”:“135_旧”,
“频道”:“1”,
“日期”:“2019年1月1日”,
"00:15": "0.48",
"00:30": "0.6",
"00:45": "0.896",
"01:00": "0.712",
"01:15": "1.12",
"23:00": "0.48",
"23:15": "0.6",
"23:30": "0.624",
"23:45": "0.552",
"00:00": "0.704"
},
{
“ID”:“10D1040B”,
“类”:“R”,
“样本”:“135_旧”,
“频道”:“1”,
“日期”:“2019年1月2日”,
"00:15": "1.016",
"23:30": "0.632",
"23:45": "0.72",
"00:00": "0.776"
}
];
const nonneedkeys=[“ID”、“Class”、“Sample”、“Channel”、“Date”];
data.forEach(函数(行){
常量键=d3.键(行).过滤器(函数(d){
返回不需要的密钥。indexOf(d)=-1;
});
row.maxValue=d3.max(keys.map)(函数(d){
返回+行[d]
}))
});
console.log(数据)

谢谢,这非常有帮助。我的数据集包含来自多个日期的多个ID的数据。使用d3.group这样构造数据会有好处吗。一旦数据进入组中,就有点不清楚如何为一个日期绘制一个ID。我意识到这超出了原始问题的范围。乐意编辑原始问题或提交新问题。请不要编辑您的问题:如果您有其他问题,请发布新问题。