所以我有一些用于不同数据集的数组,它们看起来与此类似:
[["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] });
这对我的目的是使数据可视化,因为它返回了事件列表,但是为了创建详细的图形,我需要使用相同的键来获取所有值的平均值。这是我完全陷入困境的地方。
答案 0 :(得分:0)
您可以使用Route::domain('{account}.myapp.com')->group(function () {}
数组方法
filter
这将使您平均所需的航路
答案 1 :(得分:0)
如果您具有预定义的数据集格式,例如每个数组的第一个索引将是文本,数组的第二个索引将是值,那么您可以以此计算平均值
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');
答案 2 :(得分:0)
您可以用Array.prototype.reduce
通过关键字对所有条目进行分组,同时计算总计和金额,然后遍历分组对象并计算平均值:
var data=[["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]];
var grouped = data.reduce((all, [key, val]) => {
if (!all[key]) all[key] = {sum: 0, count:0}
all[key].count++;
all[key].sum += val;
return all;
},{});
var averages = Object.keys(grouped).reduce((all, k) => {
all[k] = parseInt(grouped[k].sum / grouped[k].count);
return all;
}, {});
console.log(averages.zufrieden);
console.log(averages.unsicher);
答案 3 :(得分:0)
所有信息都在一个对象中,仅需一次迭代O(n):
var arr = [
["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]
]
var average = {}
arr.map(o => {
if (o[0] in average) {
average[o[0]][0] += o[1]
average[o[0]][1]++
average[o[0]][2] = average[o[0]][0] / average[o[0]][1]
} else {
average[o[0]] = []
average[o[0]].push(o[1]);//<-- Name
average[o[0]].push(1);//<-- Quantity
average[o[0]].push(o[1] / 1);//<-- Average
}
})
console.log(average.schuldig[2])//<-- Average
console.log(average)
关键永远是计算平均值,最后我们得到真实的平均值。
答案 4 :(得分:0)
遍历数据,使用数组的过滤器功能,并将当前对象的[0]索引与过滤器对象的[0]索引进行比较。现在您已经匹配了元素,现在使用数组的reduce方法来计算当前键的总和,即“ zufrieden”,然后将其值除以匹配数组的长度,然后将该值推入外循环的当前迭代中,即“ x”
const data = [
["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]
];
/*
loop through your data, use array's filter function and compare your current object's [0] index with filters object's [0] index. Now you have matched elements, now use array's reduce method to calculate sum for current key i.e 'zufrieden' and then divide its value by the length of matched array and push that value in current iteration of outer loop i.e 'x'
*/
data.forEach(x => {
const matched = data.filter(y => y[0] == x[0]);
x.push(matched.map(z => z[1]).reduce((a, b) => a + b, 0) / matched.length);
});
console.log(data);