gpt4 book ai didi

JavaScript;计算平均值,排除某些值

转载 作者:行者123 更新时间:2023-12-03 06:48:48 25 4
gpt4 key购买 nike

我的问题

我有一系列由调查中的满意度得分填充的变量。这些分数介于 1 到 10 之间,但也可以是 99,表示“我不知道”。

如果没有一系列的If语句,是否可以计算所有问题的平均值,同时排除99?

我的尝试

对于下面的示例中检索问题数据的方式有点奇怪,我们深表歉意。这 3 个问题中的每一个都有 3 个衡量标准,并给出满意度评级。我正在使用的Confirmit调查平台使用f('x_y').get()来获取答案,其中x =问题ID和y = 测量,因此 f('q3_1').get() 返回问题 3 中第一个测量的得分。

var qList = ['q3', 'q4', 'q6']; // 3 questions, each containing 3 satisfaction scores

var output
var i
for (i = 0; i < qList.length; i++){ // For each question in qList...
// Collect each satisfaction rating & convert to flaoting-point number:
var sat1 = parseFloat( f(qList[i].concat('_1')).get() );
var sat2 = parseFloat( f(qList[i].concat('_2')).get() );
var sat3 = parseFloat( f(qList[i].concat('_3')).get() );

// Calculate average satisfaction
var satAvg = (sat1 + sat2 + sat3) / 3;

if (satAvg == NaN){
output = "<em>Did not answer</em>";
} else {
output = satAvg.toString().concat('/10');
}

// Write to open-text questions:
f('av'.concat(i +1)).set(output)
}

上述填充的开放文本 av1、av2 和 av3 问题的内容会连接到电子邮件警报中,保持此警报简短是需要平均值的原因。显然,任何“我不知道”的回答都会影响这个平均值。

编辑:根据下面 @Cimbali 的回答,我现在将这些值放入一个数组中。这意味着不需要的答案(11 和空白)可以通过循环中的单个 if 语句排除:

var qList = ['q3', 'q4', 'q6'];

// Get satisfaction scores:
var i;
for (i = 0; i < qList.length; i++){
var answers = [
parseFloat( f(qList[i].concat('_1')).get() ),
parseFloat( f(qList[i].concat('_2')).get() ),
parseFloat( f(qList[i].concat('_3')).get() )
];

// Remove "I don't know" (11) and blank answers:
var y;
for (y = 0; y < answers.length; y++){
if ( answers[y] > 10 || isNaN(answers[y]) ){
answers.splice(y, 1);
}
}

// Calculate sum of remaining answers:
var sum = 0;
var x;
for (x = 0; x < answers.length; x++){
sum += answers[x];
}

// Calculate mean:
var average = sum / answers.length;

if ( isNaN(average) ){
// If mean couldn't be calculated, just enter 'N/A':
var output = "N/A";
} else {
// Round to 2 decimal places & add the '/10':
var output = average.toFixed(2).concat("/10");
}

// Write to open text questions:
f('av'.concat(i +1)).set(output);
}

但是,我仍然有兴趣了解更快的方法。

最佳答案

尝试将它们放入数组中并 filtering the array .

类似于:

function validAnswer(n) { return !isNaN(n) && n <= 10; }
answers = [
parseFloat( f(qList[i].concat('_1')).get() ),
parseFloat( f(qList[i].concat('_2')).get() ),
parseFloat( f(qList[i].concat('_3')).get() )
].filter(validAnswer);

answers 现在仅包含有效答案。对数组的内容求和并除以其长度以获得平均值。请记住,您可能根本没有有效的答案。

这对于更大的数组来说更有意义,在这种情况下,您可能希望用循环填充数组,而不是像这样硬编码。

function validAnswer(n) { return !isNaN(n) && n <= 10; }

// use functions to populate the array, hardcoded for the example
answers = [1, 2, 11, "not a valid number", 10].filter(validAnswer);
average = answers.length > 0 ? answers.reduce((val, sum) => val + sum) / answers.length: "N/A";

console.log("valid answers are [" + answers + "], average = " + average);

关于JavaScript;计算平均值,排除某些值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37595418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com