当前位置:首页 > JavaScript

js实现小计

2026-02-01 09:55:48JavaScript

实现小计功能

在JavaScript中实现小计功能通常涉及对一组数据进行累加或汇总。以下是几种常见场景的实现方法:

js实现小计

数组元素求和

const numbers = [1, 2, 3, 4, 5];
const subtotal = numbers.reduce((sum, num) => sum + num, 0);
console.log(subtotal); // 输出15

表格行小计

假设有一个HTML表格,需要计算每行的小计:

js实现小计

<table id="order-table">
  <tr>
    <td><input type="number" class="quantity" value="2"></td>
    <td><input type="number" class="price" value="10"></td>
    <td class="subtotal">20</td>
  </tr>
  <tr>
    <td><input type="number" class="quantity" value="3"></td>
    <td><input type="number" class="price" value="5"></td>
    <td class="subtotal">15</td>
  </tr>
</table>
<p>总计: <span id="total">0</span></p>
function calculateSubtotals() {
  const rows = document.querySelectorAll('#order-table tr');
  let grandTotal = 0;

  rows.forEach(row => {
    const quantity = parseFloat(row.querySelector('.quantity').value) || 0;
    const price = parseFloat(row.querySelector('.price').value) || 0;
    const subtotal = quantity * price;
    row.querySelector('.subtotal').textContent = subtotal.toFixed(2);
    grandTotal += subtotal;
  });

  document.getElementById('total').textContent = grandTotal.toFixed(2);
}

// 监听输入变化
document.querySelectorAll('#order-table input').forEach(input => {
  input.addEventListener('change', calculateSubtotals);
});

// 初始计算
calculateSubtotals();

对象数组属性汇总

处理包含多个对象的数组时,可以这样计算小计:

const items = [
  { name: 'Item1', quantity: 2, price: 10 },
  { name: 'Item2', quantity: 1, price: 20 },
  { name: 'Item3', quantity: 3, price: 5 }
];

const subtotals = items.map(item => ({
  ...item,
  subtotal: item.quantity * item.price
}));

const grandTotal = subtotals.reduce((sum, item) => sum + item.subtotal, 0);
console.log(subtotals, grandTotal);

动态添加项目的小计

对于动态添加的项目,可以使用事件委托来处理计算:

document.getElementById('item-container').addEventListener('input', (e) => {
  if (e.target.classList.contains('quantity') || e.target.classList.contains('price')) {
    const row = e.target.closest('.item-row');
    const quantity = parseFloat(row.querySelector('.quantity').value) || 0;
    const price = parseFloat(row.querySelector('.price').value) || 0;
    row.querySelector('.subtotal').textContent = (quantity * price).toFixed(2);
    updateGrandTotal();
  }
});

function updateGrandTotal() {
  const subtotals = Array.from(document.querySelectorAll('.subtotal'));
  const total = subtotals.reduce((sum, el) => sum + parseFloat(el.textContent), 0);
  document.getElementById('grand-total').textContent = total.toFixed(2);
}

这些方法涵盖了JavaScript中实现小计功能的常见场景,可以根据具体需求选择或组合使用。

标签: 小计js
分享给朋友:

相关文章

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <htm…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…

js 实现图片 放大

js 实现图片 放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性可以实现图片的平滑放大效果。结合 JavaScript 监听鼠标事件控制放大状态: con…