如何计算数组中元素的数量 below/above 给定数字 (javascript)
How to count the number of elements in an array below/above a given number (javascript)
仅包含数字的数组示例:
var array = [3.1, 1, 2.2, 5.1, 6, 7.3, 2.1, 9]
已编辑
如何计算有多少(根据单词 'sum' 编辑) 数组中的元素低于/高于给定数字,例如。 “5.25”?
所以答案应该是 5
元素在 (3.1, 1, 2.2, 5.1, 2.1) 以下,3
元素在 (6, 7.3, 9) 以上
使用Array#reduce,对象{ above: 0, below: 0 }
作为初始值。在每次迭代中,根据媒体检查每个数字,并相应地将 1 添加到 above/below.
注意:这是一个字符串数组。我已经手动将它们转换为数字。我还假设应该在下面添加一个等于中位数的数字。如果您想跳过此数字,请将比较更改为 <
。
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 or the +
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);
假设您使用的是数字数组..
我使用 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>
有两种策略,但我将使用易于阅读和理解的策略:
(1) 创建一个包含所有符合条件的元素的新数组 <=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;
希望对您有所帮助!
不需要reduce,因为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);
仅包含数字的数组示例:
var array = [3.1, 1, 2.2, 5.1, 6, 7.3, 2.1, 9]
已编辑
如何计算有多少(根据单词 'sum' 编辑) 数组中的元素低于/高于给定数字,例如。 “5.25”?
所以答案应该是 5
元素在 (3.1, 1, 2.2, 5.1, 2.1) 以下,3
元素在 (6, 7.3, 9) 以上
使用Array#reduce,对象{ above: 0, below: 0 }
作为初始值。在每次迭代中,根据媒体检查每个数字,并相应地将 1 添加到 above/below.
注意:这是一个字符串数组。我已经手动将它们转换为数字。我还假设应该在下面添加一个等于中位数的数字。如果您想跳过此数字,请将比较更改为 <
。
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 or the +
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);
假设您使用的是数字数组..
我使用 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>
有两种策略,但我将使用易于阅读和理解的策略:
(1) 创建一个包含所有符合条件的元素的新数组 <=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;
希望对您有所帮助!
不需要reduce,因为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);