如何计算数组中低于/高于给定数字(javascript)的元素数量

时间:2017-11-01 08:51:50

标签: javascript arrays numbers counting

这是仅包含数字的数组示例:

var array = [3.1, 1, 2.2, 5.1, 6, 7.3, 2.1, 9]

EDITED

如何计算元素的数量(从单词'sum'编辑)元素在数组之下/之上,例如。 '5.25'?

所以答案应该是5元素在下面(3.1,1,2.2,5.1,2.1)和3元素在上面(6,7.3,9)

4 个答案:

答案 0 :(得分:4)

Array#reduce与对象{ above: 0, below: 0 }一起用作初始值。在每次迭代时,根据媒体检查每个数字,并相应地在上/下添加1。

注意:这是一个字符串数组。我已经手动将它们转换为数字。我还假设应该在下面添加一个等于中位数的数字。如果您想跳过此数字,请将比较更改为<

var array = [3.1, 1, 2.2, 5.1, 6, 7.3, 2.1, 9];

var median = 5.25;

var counts = array.reduce(function(s, n) {
  s[n <= median ? 'below' : 'above'] += 1;
  
  return s;
}, { above: 0, below: 0 });

console.log(counts);

如果您必须拥有一个字符串数组,则可以使用String#parseFloat+ operator在运行时转换为数字:

var array = ['3.1', '1', '2.2', '5.1', '6', '7.3', '2.1', '9'];

var median = 5.25;

var counts = array.reduce(function(s, str) {
  s[+str <= median ? 'below' : 'above'] += 1;
  
  return s;
}, { above: 0, below: 0 });

console.log(counts);

答案 1 :(得分:2)

不需要降低,因为使用reduce不会改变结果,它仍然是一个对象。

var array = [3.1, 1, 2.2, 5.1, 6, 7.3, 2.1, 9],
    value = 5.25,
    counts = { below: 0, equal: 0, above: 0 };

array.forEach(function(v) {
    counts[{ '-1': 'below', 0: 'equal', 1: 'above' }[Math.sign(v - value)]]++;
});

console.log(counts);

答案 2 :(得分:0)

假设您使用的是数字数组..

我使用lodash ...它有助于缩短代码和时间

var array = [3.1, 1, 2.2, 5.1, 6, 7.3, 2.1, 9];


console.log(_.sum(array));   //  _.sum  does the addition
<script src="https://cdn.jsdelivr.net/lodash/4.14.1/lodash.min.js"></script>

答案 3 :(得分:0)

有几种策略,但我会使用易于阅读和理解的策略:

(1)使用符合条件&lt; = 5.25

的所有元素创建一个新数组
let sampleArr = ['3.1', '1', '2.2', '5.1', '6', '7.3', '2.1', '9'];

let sortedArr = sampleArr.filter(function(e){
     return parseInt(e) <= 5.25
});

注意我编写了parseInt(e),它将字符串转换为数字。您在数组中给出的值都是字符串。

(2)现在只需得到sortedArr的长度:

let finalCount = sortedArr.length;

希望这有帮助!