当前位置:首页 > JavaScript

sumif实现js

2026-04-05 05:16:35JavaScript

sumif 函数的 JavaScript 实现

在 JavaScript 中实现类似 Excel 的 SUMIF 功能,可以通过自定义函数来完成。SUMIF 的基本逻辑是对满足特定条件的数值进行求和。

基本实现

以下是一个简单的 sumif 函数实现,接受数组、条件和可选的求和范围:

function sumif(range, criteria, sumRange) {
    let sum = 0;
    const useSumRange = sumRange && sumRange.length === range.length;

    for (let i = 0; i < range.length; i++) {
        if (checkCriteria(range[i], criteria)) {
            sum += useSumRange ? sumRange[i] : range[i];
        }
    }
    return sum;
}

function checkCriteria(value, criteria) {
    if (typeof criteria === 'function') {
        return criteria(value);
    }
    if (typeof criteria === 'string') {
        if (criteria.startsWith('>')) {
            return value > parseFloat(criteria.substring(1));
        }
        if (criteria.startsWith('<')) {
            return value < parseFloat(criteria.substring(1));
        }
        if (criteria.startsWith('=')) {
            return value == criteria.substring(1);
        }
        return value == criteria;
    }
    return value === criteria;
}

使用示例

const data = [10, 20, 30, 40, 50];
const sum1 = sumif(data, '>30'); // 90 (40 + 50)
const sum2 = sumif(data, (x) => x % 20 === 0); // 60 (20 + 40)

const items = ['Apple', 'Banana', 'Apple', 'Orange'];
const quantities = [5, 10, 8, 3];
const sum3 = sumif(items, 'Apple', quantities); // 13 (5 + 8)

高级功能实现

对于更复杂的条件判断,可以扩展 checkCriteria 函数:

function checkCriteria(value, criteria) {
    if (criteria instanceof RegExp) {
        return criteria.test(value);
    }
    // 其他条件判断...
}

性能优化

对于大型数据集,可以考虑使用数组的 reduce 方法:

sumif实现js

function sumif(range, criteria, sumRange) {
    const useSumRange = sumRange && sumRange.length === range.length;
    return range.reduce((sum, val, i) => {
        return checkCriteria(val, criteria) 
            ? sum + (useSumRange ? sumRange[i] : val)
            : sum;
    }, 0);
}

这个实现提供了基本的 SUMIF 功能,并支持多种条件格式,包括字符串比较、数值比较和自定义函数判断。可以根据需要进一步扩展条件判断逻辑。

标签: sumifjs
分享给朋友:

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Pro…

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…