sumif实现js

实现 SUMIF 功能的 JavaScript 方法
在 JavaScript 中,可以通过自定义函数模拟 Excel 的 SUMIF 功能。以下是一个实现示例:
function sumif(range, criteria, sumRange) {
let sum = 0;
for (let i = 0; i < range.length; i++) {
if (typeof criteria === 'function') {
if (criteria(range[i])) {
sum += sumRange ? sumRange[i] : range[i];
}
} else {
if (range[i] == criteria) {
sum += sumRange ? sumRange[i] : range[i];
}
}
}
return sum;
}
使用示例
const data = [10, 20, 30, 40, 50];
const categories = ['A', 'B', 'A', 'C', 'B'];
// 简单条件求和
console.log(sumif(data, (val) => val > 30)); // 输出 90 (40+50)
// 带分类条件求和
console.log(sumif(categories, 'A', data)); // 输出 40 (10+30)
高级实现支持多种条件
对于更复杂的条件判断,可以扩展函数:
function sumif(range, criteria, sumRange) {
return range.reduce((sum, val, i) => {
let match = false;
if (typeof criteria === 'function') {
match = criteria(val, i);
} else if (typeof criteria === 'string') {
// 支持比较运算符
const operator = criteria.match(/^([<>]=?|==?)(.*)/);
if (operator) {
const op = operator[1];
const num = parseFloat(operator[2]);
match = eval(`${val} ${op} ${num}`);
} else {
match = val == criteria;
}
} else {
match = val === criteria;
}
return match ? sum + (sumRange ? sumRange[i] : val) : sum;
}, 0);
}
扩展用法示例
const sales = [100, 200, 150, 300, 250];
const regions = ['North', 'South', 'North', 'East', 'South'];
// 使用字符串条件
console.log(sumif(sales, '>150')); // 750 (200+300+250)
// 多条件组合
console.log(sumif(regions, 'North', sales)); // 250 (100+150)
这种方法提供了灵活的求和功能,可以根据需要调整条件判断逻辑。







