”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 使用数组和函数在 JavaScript 中构建初学者友好的购物车的分步指南

使用数组和函数在 JavaScript 中构建初学者友好的购物车的分步指南

发布于2024-11-07
浏览:666

Step-by-Step Guide to Building a Beginner-Friendly Shopping Cart in JavaScript Using Arrays and Functions

学习新编程语言的最佳方法是创建尽可能多的项目。如果您构建专注于您所学知识的迷你项目,您将获得更顺畅的初学者体验。
我们的目标是避免“教程地狱”——你不断观看几个教程视频而没有任何具体项目来展示你的技能的可怕地方——并建立处理大型项目所需的信心。
在本文中,我将向初学者解释如何使用基本的 Javascript 概念创建购物车系统。

先决条件

要尝试这个项目,您需要深入了解:

  • 功能
  • 方法
  • 数组

构建什么?

购物车将有一个系统,用户可以:

  • 将商品添加到购物车
  • 从购物车中删除商品
  • 查看购物车内容
  • 计算购物车中商品的总价

第 1 步:设置数据

首先,我们需要创建一些数组来保存项目的数据。具体需要的数组有:

  • itemNames:指定每个项目的名称。
  • itemPrices:包含每件商品的价格。
  • itemQuantities:告诉特定物品有多少可用。
  • itemInStock:通过使用 true 或 false 确定商品是否有库存。

const itemNames = ["Laptop", "Phone"];
const itemPrices = [1000, 500];
const itemQuantities = [1, 2];
const itemInStock = [true, true];


第 2 步:使用功能构建购物车

我们将创建一个主要的购物车功能,其中包含购物车的逻辑。我们将使用闭包来确保购物车保持私密性,并且只有某些功能可以与其交互。


const ShoppingCart = () => {
  const cart = []; // The cart is a private array

  // Add an item to the cart
  const addItemToCart = (itemIndex) => {
    if (itemInStock[itemIndex]) {
      cart.push(itemIndex);
      console.log(`${itemNames[itemIndex]} added to the cart`);
    } else {
      console.log(`${itemNames[itemIndex]} is out of stock`);
    }
  };

  // Remove an item from the cart
  const removeItemFromCart = (itemIndex) => {
    const index = cart.indexOf(itemIndex);
    if (index > -1) {
      cart.splice(index, 1);
    }
  };

  // Get the names of items in the cart
  const getCartItems = () => {
    return cart.map(itemIndex => itemNames[itemIndex]);
  };

  // Calculate the total price of items in the cart
  const calculateTotal = () => {
    return cart.reduce((total, itemIndex) => {
      return total   itemPrices[itemIndex] * itemQuantities[itemIndex];
    }, 0);
  };

  return {
    addItemToCart,
    removeItemFromCart,
    getCartItems,
    calculateTotal
  };
};


分解代码:

  • addItemToCart(itemIndex):根据商品索引将商品添加到购物车(仅当有库存时)。
  • removeItemFromCart(itemIndex):使用索引从购物车中删除项目。
  • getCartItems():使用map()将索引转换为名称返回购物车中商品的名称。
  • calculateTotal():通过使用reduce()方法将购物车中商品的价格和数量相乘来计算总价。

第 3 步:测试购物车

完成的项目应该进行测试以确保其按需要工作。我们要测试:

  • 添加项目

  • 查看购物车

  • 查看总价


const myCart = ShoppingCart();

// Add a Laptop (item 0)
myCart.addItemToCart(0);

// Add a Phone (item 1)
myCart.addItemToCart(1);

// View cart contents
console.log(myCart.getCartItems()); // Output: ['Laptop', 'Phone']

// Calculate the total price
console.log(myCart.calculateTotal()); // Output: 2000


分解代码:

  • 我们通过调用它来创建购物车的实例: const myCart = shoppingCart();.
  • 我们使用 itemNames 数组中的索引将商品添加到购物车: myCart.addItemToCart(0);对于笔记本电脑和 myCart.addItemTocart(1);对于电话。
  • 我们使用 getCartItems() 打印购物车中商品的名称
  • 最后,我们使用calculateTotal()计算总价。

第 4 步:从购物车中删除商品

一个好的购物车系统必须允许用户从购物车中删除商品。我们可以通过调用removeItemFromCart()来做到这一点。


myCart.removeItemFromCart(1); // Remove the Phone

// View the updated cart
console.log(myCart.getCartItems()); // Output: ['Laptop']

// Recalculate the total price
console.log(myCart.calculateTotal()); // Output: 1000



奖励:了解购物车系统中的闭包

闭包帮助购物车数组保持私有,只能通过 ShoppingCart() 函数返回的函数访问。

  • cart数组定义在shopping cart()内部,不能从外部直接访问。但是,由于 addItemTocart()、removeItemFromCart()、getCartItems() 和calculateTotal() 函数是在同一范围内定义的,因此它们可以与 cart.
  • 交互
  • 闭包是 JavaScript 的一项强大功能,有助于维护代码中的数据隐私和结构。

结论

通过使用基本数组和函数,您已经构建了一个功能齐全的购物车系统,可以添加、删除和计算商品总数。这个项目最棒的部分是它使用闭包来封装和管理状态,而不需要复杂的对象或类。

最终代码


const itemNames = ["Laptop", "Phone"];
const itemPrices = [1000, 500];
const itemQuantities = [1, 2];
const itemInStock = [true, true];

const ShoppingCart = () => {
  const cart = [];

  const addItemToCart = (itemIndex) => {
    if (itemInStock[itemIndex]) {
      cart.push(itemIndex);
      console.log(`${itemNames[itemIndex]} added to the cart`);
    } else {
      console.log(`${itemNames[itemIndex]} is out of stock`);
    }
  };

  const removeItemFromCart = (itemIndex) => {
    const index = cart.indexOf(itemIndex);
    if (index > -1) {
      cart.splice(index, 1);
    }
  };

  const getCartItems = () => {
    return cart.map(itemIndex => itemNames[itemIndex]);
  };

  const calculateTotal = () => {
    return cart.reduce((total, itemIndex) => {
      return total   itemPrices[itemIndex] * itemQuantities[itemIndex];
    }, 0);
  };

  return {
    addItemToCart,
    removeItemFromCart,
    getCartItems,
    calculateTotal
  };
};

const myCart = ShoppingCart();
myCart.addItemToCart(0);
myCart.addItemToCart(1);
console.log(myCart.getCartItems());
console.log(myCart.calculateTotal());
myCart.removeItemFromCart(1);
console.log(myCart.getCartItems());
console.log(myCart.calculateTotal());


我希望您喜欢学习,我很高兴您能够构建更多精彩的项目!

版本声明 本文转载于:https://dev.to/tomilonge/step-by-step-guide-to-building-a-beginner-friendly-shopping-cart-in-javascript-using-arrays-and-functions-4c68?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • Day f Brylnt:Next.js 与 Remix
    Day f Brylnt:Next.js 与 Remix
    大家好!我知道这与 Brylnt 的制作并不直接相关,但在决定使用哪个框架时我遇到了一些问题,我想我应该分享一下我对两个流行竞争者的想法:Next.js 和 混音. 这两个框架都很优秀,根据项目的不同,任何一个都可能是正确的选择。由于我使用的是 T3 Stack,其中包括 Next.js,我自然倾向...
    编程 发布于2024-11-08
  • 学习 CSS 网格:包含大量示例的简单指南
    学习 CSS 网格:包含大量示例的简单指南
    Hey there! If you've ever felt like CSS Grid is a bit like trying to solve a Rubik's Cube blindfolded, you're not alone. I'm Eleftheria, and today, I'...
    编程 发布于2024-11-08
  • 如何在 JavaScript 中强制刷新网页并绕过缓存?
    如何在 JavaScript 中强制刷新网页并绕过缓存?
    使用 JavaScript 硬刷新当前页面强制 Web 浏览器通过 JavaScript 硬刷新页面可确保获取页面的全新副本并更新其所有外部资源。 为了实现这一点,JavaScript 提供了一个名为 location.reload(true) 的方法。当传递 true 值时,此方法指示浏览器绕过其...
    编程 发布于2024-11-08
  • 什么是 PATH_INFO 以及它如何增强 PHP Web 应用程序?
    什么是 PATH_INFO 以及它如何增强 PHP Web 应用程序?
    深入研究 PATH_INFO:揭示其在 PHP Web 应用程序中的作用在 Web 开发领域,PHP 是一个强大的工具,用于创建动态和交互式应用程序。它的全部功能之一是名为 PATH_INFO 的神秘变量。尽管经常被提及,但许多人仍然难以理解其确切作用。本文深入研究 PATH_INFO,阐明其目的、...
    编程 发布于2024-11-08
  • 如何使用 Connector .NET 检索 MySQL 中的最后一个插入 ID?
    如何使用 Connector .NET 检索 MySQL 中的最后一个插入 ID?
    使用 Connector .NET 在 MySql 中检索最后一个插入 ID在 MySql 中,最后一个插入 ID 是指分配给新插入的标识符排。该值在某些情况下可能很有价值,例如填充外键关系。最初,假设 MySqlHelper 类的 ExecuteNonQuery 方法返回最后一个插入 ID。然而,...
    编程 发布于2024-11-08
  • 如何在 PHP 中使用 cURL 获取 API 响应?
    如何在 PHP 中使用 cURL 获取 API 响应?
    在 PHP 中使用 cURL 获取 API 响应在 PHP 中,您可以创建一个独立的类,其中包含通过 cURL 调用 API 的函数并获得响应。以下是实现此目的的方法:class ApiRequest { public function getResponse($url) { // Se...
    编程 发布于2024-11-08
  • Ansible 入门 - 初学者指南:日复一日的 DevOps 工具系列
    Ansible 入门 - 初学者指南:日复一日的 DevOps 工具系列
    欢迎来到我们的“50 天 50 个 DevOps 工具”系列的第 30 天!今天,我们将探索 Ansible,它是 DevOps 工具包中最重要的工具之一。本博客将向您介绍 Ansible 的基础知识,分解其关键组件并向您展示如何从简单的示例开始。我们会让事情简单明了,使其成为初学者的完美起点。 ...
    编程 发布于2024-11-08
  • 什么是CPU寄存器
    什么是CPU寄存器
    什么是寄存器: 计算机寄存器是计算机中央处理单元 (CPU) 内的小型高速存储单元,用于临时保存数据和指令,以便在处理过程中快速访问。它们是直接影响 CPU 运算速度和效率的重要组件。 寄存器的访问速度比内存更快,因为它们位于 CPU 内部。这种接近性允许更快的数据检索和处理。 寄存器内存是计算机中...
    编程 发布于2024-11-08
  • 折叠还是双折?这是一个技术问题!
    折叠还是双折?这是一个技术问题!
    我们现在不能停下来,因为我们已经投资了 1 倍,但多年来让我们继续投入 100 倍!斯托克斯! JavaScript 示例 你可能以前听说过,但 Javascript 是在 10 天之内写成的。它的采用率迅速增长,即使在使用该语言几年后,他们也不想引入重大变化……所以,现在该语言已经...
    编程 发布于2024-11-08
  • 动态 Getter 和 Setter 如何增强 JavaScript 的灵活性?
    动态 Getter 和 Setter 如何增强 JavaScript 的灵活性?
    在 JavaScript 中实现动态 Getter 和 Setter:指南在传统 JavaScript 中,getter 和 setter 是为特定属性名称定义的。但是,可以使用 ES2015 中引入的代理创建更灵活的动态 getter 和 setter。使用代理的动态 getter 和 sette...
    编程 发布于2024-11-08
  • 如何在 Go 中将类型变量传递给函数进行类型断言?
    如何在 Go 中将类型变量传递给函数进行类型断言?
    将类型变量传递给函数进行类型断言您希望通过将类型传递给函数来执行类型断言。本质上,您的目标是实现以下目标:// Note that this is pseudocode, because Type isn't valid here func myfunction(mystring string, m...
    编程 发布于2024-11-08
  • 从输入字段获取文本..
    从输入字段获取文本..
    Java代码 public class MainActivity extends AppCompatActivity { Button btn; TextView textView; @Override protected void onCreate(Bundle s...
    编程 发布于2024-11-08
  • PSD 批量编辑器
    PSD 批量编辑器
    大家好!我正在分享我在过去几个月开发的这个新软件。 我希望它可以帮助一些人,并且有些人可能有兴趣帮助我改进它。我想添加很多功能,所以请随时告诉我您希望在软件中看到什么。 在技术方面,我开始这个项目是为了尝试在我的代码中实现一些设计模式,并更好地构建架构。这也是我第一次使用QT(我在过去的GUI项目...
    编程 发布于2024-11-08
  • 为什么 WinAPI Sleep(1) 会导致 15 毫秒暂停?
    为什么 WinAPI Sleep(1) 会导致 15 毫秒暂停?
    了解 WinAPI Sleep() 函数持续时间的差异当以 1 毫秒为参数调用 WinAPI Sleep() 函数时,据观察,线程实际上暂停的时间要长得多,通常约为 15 毫秒。这种现象引起了人们对潜在系统问题的担忧。Windows 中的时间量化Windows 采用时间量化机制进行线程调度。这意味着...
    编程 发布于2024-11-08
  • 以下是一些符合条件的标题选项: 

* JavaScript 中的相对路径与绝对路径:何时使用哪个?
* JavaScript 路径:绝对路径还是相对路径?性能和安全指南。
* 瓦时
    以下是一些符合条件的标题选项: * JavaScript 中的相对路径与绝对路径:何时使用哪个? * JavaScript 路径:绝对路径还是相对路径?性能和安全指南。 * 瓦时
    澄清 JavaScript 中的相对路径和绝对路径相对路径和绝对路径是 Web 开发中的基本概念,理解它们的差异至关重要。定义绝对路径指定相对于根目录的位置(例如,/images/kitten.png)。另一方面,相对路径指定相对于当前工作目录的位置(例如,kitten.png)。性能注意事项相对路...
    编程 发布于2024-11-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3