【发布时间】:2015-12-22 23:34:21
【问题描述】:
我正在做一个初学者练习,求var numbers = [23,9,14,2,28,19,3,15,9,25,2,4,9] 的均值/中值/众数/范围。平均值很简单,但我必须得到中位数唯一的数字。我遇到了一些非常适合的东西:
var numbersUnique = numbers.filter(
function(i, j, k) {
return j === k.indexOf(i);
}
)
它甚至对它们进行排序。我不知道它是如何工作的。我浏览了this doc,但实际上并没有类似的东西。
我什至不知道您可以使用比较运算符返回一些东西。我认为它可能是 if (j === k.indexOf(i)) { return j; } 的简写,但记录 [3, 4, 9, 14, 15, 19, 23, 25, 28] 而不是 [2, 3, 4, 9, 14, 15, 19, 23, 25, 28] 就像原来的那样。
这个函数到底在做什么?
完整代码
var numbers = [23, 9, 14, 2, 28, 19, 3, 15, 9, 25, 2, 4, 9];
// Mean
var numbersTotal = 0;
for (i = 0; i < numbers.length; i++) {
numbersTotal += numbers[i];
}
var numbersMean = (numbersTotal / numbers.length);
console.log("The mean is " + numbersMean);
// Median
var numbersSorted = numbers.sort(function (a, b) {
return a - b;
})
var numbersUnique = numbers.filter(function (i, j, k) {
return j === k.indexOf(i);
})
console.log(numbersUnique);
【问题讨论】:
-
为什么我在 Chrome 控制台中尝试时得到
[23, 9, 14, 2, 28, 19, 3, 15, 25, 4]而不是您的排序结果。我认为我的结果对你来说很有意义。 -
@JasmineOT 哦,奇怪。不知何故,即使我将排序方法分配给了一个变量,它也会继续存在。我对此很陌生,所以请原谅我。用完整的代码编辑了我的帖子。
-
这很清楚。你自己做了排序。并且在你对数组使用
sort( )之后,数组会保留新的排序数组。 -
也许把你的回调变量改成比
i, j, k更有意义的变量。 -
@JasmineOT 好吧,我只注意到排序后有重复,所以就是这样
标签: javascript arrays function methods