仅添加奇数或偶数。

时间:2018-08-24 08:30:47

标签: javascript arrays

我想做一个函数,当给定一个数字数组和一个条件(例如奇数或偶数)时,与之匹配的数字 条件加在一起。如果没有值与条件匹配,则应返回0。

在没有Array.prototype.filter()的情况下该怎么做-我的教科书告诉我在没有此方法的情况下会这样做。

如果我应该使用if语句怎么办?

console.log(conditionalSum([1, 2, 3, 4, 5], "even"));        => 6
console.log(conditionalSum([1, 2, 3, 4, 5], "odd"));         => 9
console.log(conditionalSum([13, 88, 12, 44, 99], "even"));   => 144
console.log(conditionalSum([], "odd"));                      => 0

谢谢。

6 个答案:

答案 0 :(得分:3)

您可以通过选择正确的回调来减少数组。

function conditionalSum(array, parts) {
    return array.reduce(
        parts === 'even' 
            ? (s, v) => s + (!(v % 2) && v)
            : (s, v) => s + (v % 2 && v),
        0
   );
}

console.log(conditionalSum([1, 2, 3, 4, 5], "even"));      //   6
console.log(conditionalSum([1, 2, 3, 4, 5], "odd"));       //   9
console.log(conditionalSum([13, 88, 12, 44, 99], "even")); // 144
console.log(conditionalSum([], "odd"));                    //   0

答案 1 :(得分:0)

function conditionalSum(arr, cond) {
  var total_length = arr.length;
  var total_num = 0;
  if (total_length === 0) {
    return 0;
  }
  if (cond === 'even') {
    for (i = 0; i < arr.length; i++) {
      if (arr[i] % 2 === 0) {
        total_num += arr[i];
      }
    }
  }
  if (cond == 'odd') {
    for (i = 0; i < arr.length; i++) {
      if (arr[i] % 2 != 0) {
        total_num += arr[i];
      }
    }
  }

  return total_num;
}

检查一下

答案 2 :(得分:0)

简单而整洁的解决方案

function conditionalSum(nums, operation) {
  var condition = ['even', 'odd'];
  sum = 0;
  nums.forEach(function(i) {
    if (condition[i % 2] == operation) {
      sum += i;
    }
  });
  return sum;
}

console.log(conditionalSum([1, 2, 3, 4, 5], "even"));
console.log(conditionalSum([1, 2, 3, 4, 5], "odd"));
console.log(conditionalSum([13, 88, 12, 44, 99], "even"));
console.log(conditionalSum([], "odd"));

希望,这会有所帮助。

答案 3 :(得分:0)

我建议传递条件函数作为参数。

这样,您可以将相同的功能重复用于许多不同的操作。

$(...)

答案 4 :(得分:-2)

    const conditionalSum = (numbers, operation) => {
      const value = operation === "even" ? 0 : 1;
      return numbers.filter(number => number % 2 === value).reduce((acc, num) => acc + num, 0);
    }
    
    console.log(conditionalSum([1, 2, 3, 4, 5], "even"));      //   6
    console.log(conditionalSum([1, 2, 3, 4, 5], "odd"));       //   9
    console.log(conditionalSum([13, 88, 12, 44, 99], "even")); // 144
    console.log(conditionalSum([], "odd"));                    //   0

答案 5 :(得分:-2)

实际上有多种解决方案。

第一个正在使用filter来获取期望数字列表,然后将其求和  与reduce。这是为了获得最佳的可读性。

let conditionalSum = (arr, parity) => {
  return arr
      .filter(num => parity === 'even' ? num % 2 === 0 : num % 2 !== 0)
      .reduce((prev, curr) => prev + curr, 0);
};
console.log(conditionalSum([1, 2, 3, 4, 5], "even"));
console.log(conditionalSum([1, 2, 3, 4, 5], "odd"));
console.log(conditionalSum([13, 88, 12, 44, 99], "even"));
console.log(conditionalSum([], "odd"));

同时使用for循环有助于提供性能更高的解决方案。

let conditionalSum = (arr, parity) => {
  let sum = 0;
  for(let num of arr) {
    if(parity === 'even' && num % 2 !== 0
    || parity === 'odd' && num % 2 === 0) {
      continue;
    }
    sum += num;
  }
  return sum;
};

console.log(conditionalSum([1, 2, 3, 4, 5], "even"));
console.log(conditionalSum([1, 2, 3, 4, 5], "odd"));
console.log(conditionalSum([13, 88, 12, 44, 99], "even"));
console.log(conditionalSum([], "odd"));

因此,选择合适的解决方案完全取决于您的用例。我认为您大多数时候应该使用可读性。