Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Arrays_Typescript_Key - Fatal编程技术网

Javascript 如何从数组中提取具有相同键的值并计算其平均值?

Javascript 如何从数组中提取具有相同键的值并计算其平均值?,javascript,arrays,typescript,key,Javascript,Arrays,Typescript,Key,因此,我为不同的数据集提供了一些数组,它们看起来与此类似: [["zufrieden",10], ["beschämt",24], ["gelangweilt",50], ["begeistert",28], ["unsicher",27], ["niedergeschlagen",49], ["verärgert",72], ["frustriert",29], ["entspannt",25], ["unsicher",27], ["unsicher",31], ["schuldig",2

因此,我为不同的数据集提供了一些数组,它们看起来与此类似:

[["zufrieden",10],
["beschämt",24],
["gelangweilt",50],
["begeistert",28],
["unsicher",27],
["niedergeschlagen",49],
["verärgert",72],
["frustriert",29], 
["entspannt",25],
["unsicher",27],
["unsicher",31],
["schuldig",22],
["frustriert",18], 
["gelangweilt",73],
["wütend",30],
["verlegen",50],
["besorgt",25],
["schwermütig",0]] 
例如,如何获得schuldig的所有条目的平均值。 此外,我需要对本例中由字符串表示的每个键执行此操作。 我试着将数组转换成一个对象,然后从那里开始,但我被卡住了,希望能得到任何帮助

我已经使用map函数计算了不同字符串的出现次数

var counts = {};
orderedFeelings.forEach(function(x) { counts[x] = (counts[x] || 0)+1; });
var countsValues = Object.keys(counts).map(function(key){ return counts[key] });
当数据返回一个事件列表时,我的意图是可视化数据,这是可以的,但是为了创建一个详细的图形,我需要具有相同键的所有值的平均值。这就是我完全陷入困境的地方

您可以使用数组的过滤方法

const newArray = this.array.filter(temp => temp[0] === 'schuldig');
var total = 0;
for (each of newArray) {
  total += each[1];
}
const avg = (total/newArray.length);

这将为您提供所需的wayx平均值

如果您有一个预定义的数据集格式,如每个数组的第一个索引处为文本,数组的第二个索引处为值,则您可以通过此值计算平均值

function computeAvg(dataset,key) {
  let desiredElements = dataset.filter(item => item[0] === key);
  return (desiredElements.reduce((sum, current) => sum + current[1],0))/desiredElements.length; 
}

let dataset = [["zufrieden",10],
["beschämt",24],
["gelangweilt",50],
["begeistert",28],
["unsicher",27],
["niedergeschlagen",49],
["verärgert",72],
["frustriert",29], 
["entspannt",25],
["unsicher",27],
["unsicher",31],
["schuldig",22],
["frustriert",18], 
["gelangweilt",73],
["wütend",30],
["verlegen",50],
["besorgt",25],
["schwermütig",0]]; 

let average = computeAvg(dataset,'schuldig');

您可以使用Array.prototype.reduce按键对所有条目进行分组,同时计算总和及其数量,然后遍历分组对象并计算平均值:

var数据=[[zufrieden,10],[beschämt,24],[gelangweilt,50],[begeistert,28],[unsicher,27],[niedergeschlagen,49],[Verrgert,72],[frustriert,29],[Entspanspanspannt,25],[unsicher,27],[unsicher,22],[frustriert,18],[gelangweilt,73],[wütend,30],[verlegen,50],[besorgt,25],[Werm,0]; var group=data.reduceall[key,val]=>{ 如果!all[key]all[key]={和:0,计数:0} 全部[key].count++; 全部[key].sum+=val; 全部归还; },{}; var averages=Object.keysgrouped.reduceall,k=>{ all[k]=parseIntgrouped[k]。求和/分组[k]。计数; 全部归还; }, {}; console.logaverages.zufrieden;
console.logaverages.unsicher 一个对象中的所有信息,仅对以下对象进行一次迭代:

var arr=[ [zufrieden,10], [beschämt,24], [格朗威尔,50], [begeistert,28], [unsicher,27], [niedergeschlagen,49], [verärgert,72], [frustriert,29], [entspannt,25], [unsicher,27], [unsicher,31], [schuldig,22], [frustriert,18], [gelangweilt,73], [wütend,30], [verlegen,50], [besorgt,25], [schwermütig,0] ] 变量平均值={} arr.mapo=>{ 如果平均值为o[0]{ 平均值[o[0]][0]+=o[1] 平均值[o[0]][1]++ 平均值[o[0]][2]=平均值[o[0]][0]/平均值[o[0]][1] }否则{ 平均值[o[0]]=[]
平均[o[0]]。按[1];//循环遍历数据,使用数组的筛选函数,并将当前对象的[0]索引与筛选对象的[0]索引进行比较索引。现在您有了匹配的元素,现在使用数组的reduce方法计算当前键的和,即'zufrieden',然后将其值除以匹配数组的长度,并在外循环的当前迭代中推送该值,即'x'

常数数据=[ [zufrieden,10], [beschämt,24], [格朗威尔,50], [begeistert,28], [unsicher,27], [niedergeschlagen,49], [verärgert,72], [frustriert,29], [entspannt,25], [unsicher,27], [unsicher,31], [schuldig,22], [frustriert,18], [gelangweilt,73], [wütend,30], [verlegen,50], [besorgt,25], [schwermütig,0] ]; /* 循环遍历数据,使用数组的filter函数并将当前对象的[0]索引与filters对象的[0]索引进行比较索引。现在您有了匹配的元素,现在使用数组的reduce方法计算当前键的和,即'zufrieden',然后将其值除以匹配数组的长度,并在外循环的当前迭代中推送该值,即'x' */ data.forEachx=>{ const matched=data.filtery=>y[0]==x[0]; x、 pushmatched.mapz=>z[1]。reducea,b=>a+b,0/matched.length; };
console.logdata;请发布试图实现此目的的代码…并指出错误/问题..另外,这不是一个免费的代码编写服务非常感谢!这正是我想要的,但不知道如何实现。欢迎@Sky,如果你觉得有用,请接受答案