我想做一个函数,当给定一个数字数组和一个条件(例如奇数或偶数)时,与之匹配的数字 条件加在一起。如果没有值与条件匹配,则应返回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
谢谢。
答案 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"));
因此,选择合适的解决方案完全取决于您的用例。我认为您大多数时候应该使用可读性。