我有大约300个数组,每个数组都有100个x和y值数组。我想获得300个数组的y值的100个数组的数组。做这个的最好方式是什么?我相信我应该使用某种减少但是有点迷失。 以下是我到目前为止的情况:
let yval = cohort.map((d, i) => {
let bin = d3.nest()
.key(function(d) {
return i;
})
.rollup(function(d) {
return d;
})
.entries(d);
return bin;
});
console.log(yval);
'队列'是一个对象数组。我想隔离' bins'每个群组对象中的数组。每个都是117个元素长。对于每个箱[i],我想从所有箱子中得到[i]的平均值。我想基本上将300个数组117的数组转换成一个117个数组的数组。任何帮助将不胜感激!
答案 0 :(得分:4)
D3已经有一个名为d3.mean的方法,其中包含:
返回给定数字数组的平均值
因此,如果你想获得每个内部数组的均值,你只需要这个(其中data
是你的原始数组):
var arrayOfMeans = data.map(d => d3.mean(d));
这是一个基本演示:
var data = [
[1, 2, 3, 4, 5],
[10, 20, 30, 40, 50],
[100, 200, 300, 400, 500]
];
var arrayOfMeans = data.map(d => d3.mean(d));
console.log(arrayOfMeans)

<script src="https://d3js.org/d3.v5.min.js"></script>
&#13;
但是,您的数据结构现在还不是很清楚:代码段上方的描述(&#34;我有大约300个数组,每个数组都有100个x和y值数组&#34; )与摘录下面的描述不同(&#34;&#39; cohort&#39;是一个对象数组。我想在每个同类群组对象中隔离&#39; bins&#39;数组。每个都是117个元素长。&#34; )!这很令人困惑......
因此,假设您有一个数组数组,并且每个内部数组中有两个值[x, y]
,这就是d3.mean
这两种方法的用法,一个用于{ {1}}值和x
值的其他值:
y
或者,如果你不喜欢文字:
var arrayOfMeans = [d3.mean(data.map(d => d[0])), d3.mean(data.map(d => d[1]))];
以下是演示:
var arrayOfMeans = d3.range(2).map(d => d3.mean(data.map(e => e[d])));
&#13;
var data = [
[1, 100],
[2, 200],
[3, 300]
];
var arrayOfMeans = [d3.mean(data.map(d => d[0])), d3.mean(data.map(d => d[1]))]
console.log(arrayOfMeans)
&#13;
答案 1 :(得分:0)
已经有了如何计算JS中数组平均值的答案:
Finding the average of an array using JS
您可以使用该答案中定义的函数,并将其映射到数组数组中。例如:
var result = cohort.map(cohortElement => cohortElement.bin).map(/*function declared in other StackOverflow answer*/)
答案 2 :(得分:0)
在ForEach和array reduce方法的选项下方实现预期用途
首先使用array.ForEach方法
每个数组的内部循环,我使用reduce来查找平均值
p {white-space: normal; }
我创建了长度为300的样本数组,每个数组都有2个用于测试的数组