计算数组中的数字类型 - 功能javascript

时间:2016-05-11 03:37:47

标签: javascript functional-programming

这是我想出的一个程序,它计算数字的类型,即它的正数,负数还是零数。是否可以使用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);

http://plnkr.co/edit/CpHg1gMX0Oao4PQVd08g?p=preview

2 个答案:

答案 0 :(得分:1)

您可以使用reduce执行此操作:

Working Example

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;
}, {});

MDN Docs on reduce

您也可以使用.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]