如何在 JavaScript 中过滤嵌套对象?

news2024/12/26 14:35:04

概述

在 JavaScript 中,嵌套对象是一个简单的对象,它被括在大括号中,要使嵌套对象成为一个对象,就必须继承它自己的对象。因此,为了在 JavaScript 中过滤对象,JavaScript 提供了名为 "filter() "的方法,该 filter() 方法的参数是一个回调函数,其中返回了一个条件,在该条件下给定的数组对象将被过滤。因此,为了完成过滤任务,我们必须创建一个简单的对象,就像在其他编程语言中创建对象一样,然后继承对象中的一些键值作为嵌套值,这样就形成了一个嵌套对象。

语法

使用 filter() 方法的基本语法如下所示。在给定的语法中,"objectName "将被替换为您要创建的对象的名称,并根据您要过滤给定嵌套对象的条件返回过滤器的条件。

objectName.filter(function(){
   return condition;
});

算法

  • 第 1 步 - 在文本编辑器中创建一个 HTML 文件,文件名为 “index.html”,在索引文件中添加 HTML 模板。
  • 第 2 步 - 现在在 body 标签中创建一个父 div 容器,id 名称为 “Output”。
<div id="Output"> </div>
  • 第 3 步 - 在正文的结尾标签前添加脚本标签。
<script></script>
  • 第 4 步 - 创建一个空数组变量。
var myObj = [];
  • 第 5 步 - 现在将对象数据添加到上述用嵌套对象创建的变量中。
var myObj = [
   {
      product_id: 1,
      product_name: " product1 ",
      product_price:{
         MRP_Price:50000,
         Discount_Price:48000
      },
      product_description: "Product description for product 1. Do not take this description for the above product."
   },
   {
      product_id: 2,
      product_name: " product2 ",
      product_price:{
         MRP_Price:40000,
         Discount_Price:38000
      },
      product_description: "Product description for product 2. Do not take this description for the above product."
   },
   {
      product_id: 3,
      product_name: " product3 ",
      product_price:{
         MRP_Price:60000,
         Discount_Price:58000
      },
      product_description: "Product description for product 3. Do not take this description for the above product."
   },
   {
      product_id: 4,
      product_name: " product4 ",
      product_price:{
         MRP_Price:52000,
         Discount_Price:50000
      },
      product_description: "Product description for product 4. Do not take this description for the above product."
   }
];
  • 第 6 步 - 现在使用 filter 方法过滤嵌套对象,并将其存储到一个变量中。
var filteredObj = myObj.filter(function (item) {
});
  • 第 7 步 - 返回需要过滤数据的条件。
var filteredObj = myObj.filter(function (item) {
   return item.product_price.Discount_Price >= 50000;
});
  • 第 8 步 - 现在,过滤后的数据以对象的形式存在变量中。
  • 第 9 步 - 使用 HTML 表格,以表格形式显示过滤后的数据。
var productTable = "";
filteredObj.forEach(function (item) {
   productTable += `
   <table border="2" align="center" style="margin:1rem 0; text-align:center;">
      <tr>
         <th>Id</th>
         <th>Name</th>
         <th>MRP Price</th>
         <th>Discounted Price</th>
         <th>Description</th>
      </tr>
      <tr>
         <td>`+ item.product_id + `</td>
         <td>`+ item.product_name + `</td>
         <td>`+ item.product_price.MRP_Price + `</td>
         <td>`+ item.product_price.Discount_Price + `</td>
         <td>`+ item.product_description + `</td>
      </tr>
   </table>`
});
document.getElementById("Output").innerHTML = productTable;
  • 第 10 步 - 过滤后的数据将显示在浏览器中。

示例

在本例中,我们将创建一个嵌套对象数据,包括产品 ID、名称、价格、嵌套的 mrp 价格和折扣价格以及产品描述。因此,在本示例中,我们的主要任务是使用 filter() 方法过滤数据,我们将在 filter 方法的返回值中设置过滤对象的条件,过滤数据后,我们将以表格形式显示数据,这样用户就可以很容易地从嵌套对象数据中分析过滤后的数据。

<html>
<head>
   <title> filter nested objects </title>
</head>
<body>
   <h3> Filtered nested objects using filter() method </h3>
   <div id="Output"> </div>
   <script>
      var myObj = [
         {
            product_id: 1,
            product_name: "product1",
            product_price:{
               MRP_Price:50000,
               Discount_Price:48000
            },
            product_description: "Product description for the product. Do not take this description for the above product."
         },
         {
            product_id: 2,
            product_name: "product2",
            product_price:{
               MRP_Price:40000,
               Discount_Price:38000
            },
            product_description: "Product description for the product. Do not take this description for the above product."
         },
         {
            product_id: 3,
            product_name: "product3",
            product_price:{
               MRP_Price:60000,
               Discount_Price:58000
            },
            product_description: "Product description for the product. Do not take this description for the above product."
         },
         {
            product_id: 4,
            product_name: "product4",
            product_price:{
               MRP_Price:52000,
               Discount_Price:50000
            },
            product_description: "Product description for the product. Do not take this description for the above product."
         }
      ];
      var filteredObj = myObj.filter(function (item) {
         return item.product_price.Discount_Price >= 50000;
      });
              
      var productTable = "";
      filteredObj.forEach(function (item) {
         productTable += `
         <table border="2" align="center" style="margin:1rem 0; text-align:center;">
            <tr>
               <th>Id</th>
               <th>Name</th>
               <th>MRP Price</th>
               <th>Discounted Price</th>
               <th>Description</th>
            </tr>
            <tr>
               <td>`+ item.product_id + `</td>
               <td>`+ item.product_name + `</td>
               <td>`+ item.product_price.MRP_Price + `</td>
               <td>`+ item.product_price.Discount_Price + `</td>
               <td>`+ item.product_description + `</td>
            </tr>
         </table>`
      });
      document.getElementById("Output").innerHTML = productTable;
   </script>
</body>
</html>

下图显示了上述示例的输出结果,当我们加载上述示例时,对象列表也将被加载并存储在变量 "myObj "中。由于我们在价格键值中提取了 "MRP_Price’'"和 "Discount_Price "这两个价格,因此在过滤器返回值中,我们设置的条件是只过滤折扣价大于等于(>=)50000 的数据。因此,该对象将只过滤产品 3 和产品 4,因为它们的折扣价大于 50000。这些数据将以表格形式显示。

结论

在上面的示例中,我们以表格的形式显示了过滤后的数据,我们也可以通过在控制台中显示数据而不使用表格。但在将数据显示到控制台之前,应将数据转换为字符串,因为数据是对象形式的。我们可以使用 (JSON.stringify(filteredObjName))将数据对象转换为字符串,这是针对 JSON 等对象的字符串化方法。这种过滤对象的方法可用于联系人、电子商务等应用中。电子商务使用筛选器根据评级和价格对产品进行排序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1326018.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于CTF探讨Web漏洞的利用与防范

写在前面 Copyright © [2023] [Myon⁶]. All rights reserved. 基于自己之前在CTF中Web方向的学习&#xff0c;总结出与Web相关的漏洞利用方法&#xff0c;主要包括&#xff1a;密码爆破、文件上传、SQL注入、PHP伪协议、反序列化漏洞、命令执行漏洞、文件包含漏洞、Vim…

Switch Transformers 的模型架构

Switch Transformers 的模型架构主要由以下几个部分组成&#xff1a; **专家&#xff1a;**Switch Transformers 由多个专家组成&#xff0c;每个专家都具有独立的参数。专家的数量可以根据需要进行调整。 **路由器&#xff1a;**路由器负责根据输入选择合适的专家。路由器可…

vue2 按钮限制 点击按钮一前 灰色不可以点击 点击按钮一后 可以点击

代码 <template> <div> <button click"enableButtons">按钮1</button> <button :disabled"!isButton2Enabled" click"ann">按钮2</button> <button :disabled"!isButton3Enabled" c…

hive企业级调优策略之数据倾斜

测试所用到的数据参考&#xff1a; 原文链接&#xff1a;https://blog.csdn.net/m0_52606060/article/details/135080511 本教程的计算环境为Hive on MR。计算资源的调整主要包括Yarn和MR。 数据倾斜概述 数据倾斜问题&#xff0c;通常是指参与计算的数据分布不均&#xff0…

MySQL-3

复习 DML操纵数据语句更新&#xff1a;insert/update/delete查询&#xff1a;select select 列1 as 别名,列2 as 别名 from 表名 as 对表取别名 where 对行的筛选 group by 分组的列名 having 配合统计函数进行对组的筛选 order by 排序的列 asc/desc limit 偏移量,获得条数 嵌…

route 路由使用记录

一、路由的基本介绍 路由是计算机网络中的一个重要概念&#xff0c;它用于确定数据包从源地址到目的地址的路径。在网络中&#xff0c;路由器是负责转发数据包的设备。 下面是关于路由的基本知识和使用方法的介绍&#xff1a; 路由表&#xff1a;路由器通过路由表来确定数据包…

配置自定义RedisTemplate 解决redis序列化java8 LocalDateTime

目录 配置自定义RedisTemplate 引入依赖 配置连接redis 编写测试类 出现问题 配置序列化 解决redis序列化java8 LocalDateTime 问题背景 问题描述 问题分析 解决方案一&#xff08;全局&#xff09; 解决方案二&#xff08;单个字段&#xff09; 配置自定义RedisTe…

某电子文档安全管理系统存在任意用户登录漏洞

漏洞简介 某电子文档安全管理系统存在任意用户登录漏洞&#xff0c;攻击者可以通过用户名获取对应的cookie&#xff0c;登录后台。 资产测绘 Hunter语法&#xff1a;web.icon“9fd216c3e694850445607451fe3b3568” 漏洞复现 获取Cookie POST /CDGServer3/LinkFilterServi…

MySQL 8.0 InnoDB Tablespaces之File-per-table tablespaces(单独表空间)

文章目录 MySQL 8.0 InnoDB Tablespaces之File-per-table tablespaces&#xff08;单独表空间&#xff09;File-per-table tablespaces&#xff08;单独表空间&#xff09;相关变量&#xff1a;innodb_file_per_table使用TABLESPACE子句指定表空间变量innodb_file_per_table设置…

ESD静电的危害与失效类型及模式?|深圳比创达电子

一、ESD的危害 1、失效的电子设备有60%~75%都是由ESD造成的&#xff1b; 2、对于新兴技术行业&#xff0c;尤其是高科技微电子&#xff0c;半导体&#xff0c;电磁敏感类及光器件的应用&#xff0c;比例将上升到90%。 因静电原因造成的电子行业的损失每年都多达几百亿美元&am…

JavaWeb笔记之前端开发HTML

一、引言 1.1HTML概念 网页&#xff0c;是网站中的一个页面&#xff0c;通常是网页是构成网站的基本元素&#xff0c;是承载各种网站应用的平台。通俗的说&#xff0c;网站就是由网页组成的。通常我们看到的网页都是以htm或html后缀结尾的文件&#xff0c;俗称 HTML文件。 …

【SpringCloud】设计原则之CAP与EDA事件驱动

一、设计原则之CAP CAP 原则又称 CAP 定理&#xff0c;指的是在一个分布式系统中&#xff0c;Consistency&#xff08;一致性&#xff09;、Availability&#xff08;可用性&#xff09;和 Partition tolerance&#xff08;分区容错性&#xff09;&#xff0c;三者不可兼得&…

美颜技术详解:深入了解视频美颜SDK的工作机制

本文将深入探讨视频美颜SDK的工作机制&#xff0c;揭示其背后的科技奥秘和算法原理。 1.引言 视频美颜SDK作为一种集成到应用程序中的技术工具&#xff0c;通过先进的算法和图像处理技术&#xff0c;为用户提供令人印象深刻的实时美颜效果。 2.视频美颜SDK的基本工作原理 首…

C#上位机与欧姆龙PLC的通信04---- 欧姆龙plc的存储区

1、存储区概念 欧姆龙PLC将整个数据存储器分为10个区&#xff1a;输入继电器区、输出继电器区、内部辅助继电器区、特殊继电器区、保持继电器区、暂存继电器区、定时/计数器区、数据存储区、辅助存储继电器区、链接继电器区。 输入输出继电器区 CP1E系列PLC输入继电器区有16…

Modbus-ASCII数据帧

Modbus-ASCIl传输模式中&#xff0c;每个字节均以ASCI编码&#xff0c;实际报文中1个字节会以两ASCIl字符发送&#xff0c;因此这种模式比Modbus-RTU模式效率要低。 例如报文数据 x5B "5""B" X35 X42 . 数据帧格式如下: 从ASCI报文帧可以看出&#xff0…

探索 Vue3 (四) keep-alive缓存组件

keep-alive 的作用 官网介绍&#xff1a;KeepAlive | Vue.js keep-alive为抽象组件&#xff0c;主要用于缓存内部组件数据状态。可以将组件缓存起来并在需要时重新使用&#xff0c;而不是每次重新创建。这可以提高应用的性能和用户体验&#xff0c;特别是在需要频繁切换组件时…

java实现回文数算法

判断一个数是否为回文数可以使用以下算法&#xff1a; 将数字转化为字符串&#xff1b;初始化左右两个指针&#xff0c;分别指向字符串的首尾&#xff1b;循环比较左右指针指向的字符&#xff0c;如果相等则继续比较&#xff0c;直到左右指针相遇或者发现不相等的字符为止&…

使用凌鲨辅助学习软件研发

对于新入门的软件研发人员来说&#xff0c;Git和研发环境的搭建确实是一个不小的挑战。Git是一个分布式版本控制系统&#xff0c;用于跟踪代码的更改和协作&#xff0c;而研发环境则是一个专门用于开发和测试应用程序的环境。 在Git方面&#xff0c;新入门的软件研发人员需要了…

升级ChatGPT4的方法

1. 主要流程&#xff1a;先申请一个美区apple id&#xff0c;然后往这个apple id充钱&#xff0c;用这个apple id的钱订阅chatgpt 2. 细节&#xff1a; &#xff08;1&#xff09;申请美区apple id&#xff1a; 其实这一步很简单&#xff08;曾经以为比较复杂&#xff09;&…

23年12月AI烟火识别系统应用案例-北京梅兰芳故居防火系统

AI烟火识别智能视频分析系统在文化遗产保护领域的应用&#xff0c;尤其是在梅兰芳故居防火系统的部署&#xff0c;是现代科技与传统文化保护结合的典范。这篇文章将详细介绍富维烟火识别系统的设计、实施及其在23年12月在北京梅兰芳故居中的应用。 背景介绍 ● 梅兰芳故居的重要…