这是我想出的一个程序,它计算数字的类型,即它的正数,负数还是零数。是否可以使用reduce,map,filter等数组方法在函数式javascript中编写此代码?首选输出为数组格式。
var array= [-1,1,0,2,3,4,5,6,7,8,9,0];
var positive_count = 0, negative_count = 0;
var zero_count = 0;
for (var i = 0; i < 10; ++i)
{
if (array[i] > 0)
positive_count += 1;
else if(array[i] < 0)
negative_count += 1
else
zero_count+= 1;
}
console.log (positive_count + "," + negative_count+ "," + zero_count);
答案 0 :(得分:1)
您可以使用reduce
执行此操作:
var count = array.reduce(function(a, b){
if (b < 0) {
a.negative = ++a.negative || 1;
}
if (b === 0) {
a.zero = ++a.zero || 1;
}
if (b > 0) {
a.positive = ++a.positive || 1;
}
return a;
}, {});
您也可以使用.filter
获取长度:
var z = array.filter(function(e) {
return e === 0;
}).length;
var p = array.filter(function(e) {
return e > 0;
}).length;
var n = array.filter(function(e) {
return e < 0;
}).length;
答案 1 :(得分:0)
neelmeg。在你的脚本for循环中,你只在i&lt; 10,但你的数组包含12个元素,因此你的结果将是错误的。
是的,可以使用reduce ...
以更实用的方式执行此操作const ary = [-1,1,0,2,3,4,5,6,7,8,9,0]
const result = ary.reduce((acc, v) => {
return v > 0
? [(acc[0] + 1), acc[1], acc[2]]
: v < 0
? [acc[0], (acc[1] + 1), acc[2]]
: [acc[0], acc[1], (acc[2] + 1)]
}, [0, 0, 0])
console.log(result)
这将以[+ numCount, - numCount,zero count]的形式返回一个数组 =&GT; [9,1,2]