IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 对象数组获取满足条件的数据(filter);对数据做相同的处理(map);去除对象数组中的undefined -> 正文阅读

[游戏开发]对象数组获取满足条件的数据(filter);对数据做相同的处理(map);去除对象数组中的undefined

目录

一、问题

???二、更好的实现方式

?三、总结


一、问题

1.有一组对象数组数据,我需要从里面获取满足条件的数据,作为侧边栏显示。

1)数据如下:需要取出其中用于食用的数据(水果、蔬菜、海鲜)

        let arr = [
          { id: 8534371657605138, name: "type", item: "水果", value: "1" },
          { id: 8534371657605139, name: "type", item: "蔬菜", value: "2" },
          { id: 8534371657605140, name: "type", item: "家具", value: "3" },
          { id: 8534371657605141, name: "type", item: "海鲜", value: "4" },
          { id: 8534371657605142, name: "type", item: "电器", value: "5" },
        ];

2、第一反应用 if 判断获取满足条件的数据

? ? ?1) 但是很遗憾,使用map?处理后不满足条件的变成了 undefined !!!

        let mapArr = arr.map((item) => {
          if (item.value === "1" || item.value === "2" || item.value === "4") {
            return item;
          }
        });
图 1-1

?2)于是又考虑怎么把这些去除undefined,又开始循环,终于成功了结果如?图 1-2 所示

? 1)方法一

        let resultArr = [];
        mapArr.forEach((item) => {
          if (item !== undefined) {
            resultArr.push(item);
          }
        });

图 1-2

? ?2)方法二

        let mapArr = [
          { id: 8534371657605138, name: "type", item: "水果", value: "1" },
          { id: 8534371657605139, name: "type", item: "蔬菜", value: "2" },
          undefined,
          { id: 8534371657605141, name: "type", item: "海鲜", value: "4" },
          undefined,
        ];
        let clearUndefined = mapArr.filter((item) => {
          return item !== undefined;
        });

??二、更好的实现方式

当时写完还觉得自己挺厉害的,现在发现自己就是个傻逼。两次循环(map、forEach),还不如直接一次 forEach !!!

1.一次forEach---一步到位完成了

        let forEachArr = [];
        arr.forEach((item) => {
          if (item.value === "1" || item.value === "2" || item.value === "4") {
            forEachArr.push(item);
          }
        });

?2.filter函数---更加简洁

        let filterArr = arr.filter((item) => {
          return item.value === "1" || item.value === "2" || item.value === "4";
        });

3.?上面1和2对比,虽然filter看起来更简洁,但是?forEach也有其使用场景

? ?1)forEach:通过push加入数据,生成你想要的数据结构非常容易!!!

? ? 2)而filter则只能从原数据中筛选数据,不能修改数据结构。强行修改也不会生效!!!

例如:我现在想选择可食用数据的同时,把 item?属性改成 label属性

a.使用forEach代码

        let arr = [
          { id: 8534371657605138, name: "type", item: "水果", value: "1" },
          { id: 8534371657605139, name: "type", item: "蔬菜", value: "2" },
          { id: 8534371657605140, name: "type", item: "家具", value: "3" },
          { id: 8534371657605141, name: "type", item: "海鲜", value: "4" },
          { id: 8534371657605142, name: "type", item: "电器", value: "5" },
        ];
        let forEachArr = [];
        arr.forEach((item) => {
          if (item.value === "1" || item.value === "2" || item.value === "4") {
            forEachArr.push({
              id: item.id,
              label: item.item,
              value: item.value,
            });
     

b.使用filter强行修改数据结构代码----不生效

        let arr = [
          { id: 8534371657605138, name: "type", item: "水果", value: "1" },
          { id: 8534371657605139, name: "type", item: "蔬菜", value: "2" },
          { id: 8534371657605140, name: "type", item: "家具", value: "3" },
          { id: 8534371657605141, name: "type", item: "海鲜", value: "4" },
          { id: 8534371657605142, name: "type", item: "电器", value: "5" },
        ];
        let filterArr = arr.filter((item) => {
          let properData;
          if (item.value === "1" || item.value === "2" || item.value === "4") {
            properData = { id: item.id, label: item.item, value: item.value };
          }
          return properData;
        });

c.最终结果

?

?三、总结

1.之所以闹出这个笑话,还是因为对?map 和? filter 函数理解不深入。

2.map函数是用于对所有数据做相同处理的。所以刚开始使用map获取满足条件的数据会? 出现undefined.

3.filter函数是专门用于过滤数据,查询满足条件的

/*

希望对你有帮助!

如有错误,欢迎指正!

非常感谢!

*/

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-15 00:35:02  更:2022-04-15 00:35:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 21:08:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码