当前位置: 首页 > news >正文

数组元素为对象,对比多个数组的相同子元素并筛选

情景:两个数组,list1为多选选项列表,list2为用户已选择的选项,

                            第一个数组    list1 = [{name:'aa'}, {name:'bb'}, {name:'cc'}];

                            第二个数组     list2= ['aa', 'bb'];

目的:筛选已选选项保存,格式: [{"name":"aa","isSame":"Y"},{"name":"bb","isSame":"Y"},{"name":"cc","isSame":"N"}]

首先,思路:通过遍历两个数组,筛选重复元素push到same数组中;

 1 <script>
 2     let list1 = [{name:'aa'}, {name:'bb'}, {name:'cc'}];
 3     let list2 = ['aa', 'bb'];
 4     let same = [];
 5     for (let i = 0; i < list1.length; i++) {
 6         list1[i].isCheck = 'isFalse';
 7         for (let j = 0; j < list2.length; j++) {
 8             if (list1[i].name == list2[j]) {
 9                same.push({
10                    name:list1[i].name,
11                    isSame:'Y'
12                });
13             }else{
14                 same.push({
15                     name:list1[i].name,
16                     isSame:'N'
17                 });
18             }
19         }
20     }
21     console.log('same',same);
22 </script>
View Code

此时输出结果如下图: 

我们会发现same中被push了6个元素,但是正确结果应该是2个元素。

原因是双层for循环共执行了6次,每次都进行比对、push,所以push了6个元素。

但是,后来找到了解决办法:为筛选出的相同元素添加一个属性,避免重复向same数组push。

<script>
    let list1 = [{name:'aa'}, {name:'bb'}, {name:'cc'}];
    let list2 = ['aa', 'bb'];
    let same = [];
    for (let i = 0; i < list1.length; i++) {
        list1[i].isCheck = 'isFalse';
        for (let j = 0; j < list2.length; j++) {
            if (list1[i].name == list2[j]) {
                list1[i].isCheck = 'isTrue';
            }
        }
    }
    for (let i = 0; i < list1.length; i++) {
        same.push({
            name: list1[i].name,
            isSame: list1[i].isCheck == 'isTrue' ? 'Y' : 'N'
        })
    }
    console.log('same',JSON.stringify(same));
</script>

此时输出结果为:

same [{"name":"aa","isSame":"Y"},{"name":"bb","isSame":"Y"},{"name":"cc","isSame":"N"}]

所以,后一种方法是正确的。

转载于:https://www.cnblogs.com/lemoncool/p/8571743.html

相关文章:

  • SpringCloud之Hystrix断路器[六]
  • 八皇后(递归+深度优先搜索)
  • Carousel 走马灯
  • 优先队列的基本用法(java和c++)
  • 程序题
  • 在 GitLab 我们是如何扩展数据库的
  • 复变用于图片映射
  • 浅谈@RestController和@Controller的区别
  • KMP算法之我见
  • Java 内省(Introspector)深入理解
  • Hibernate如何支持事务
  • PS
  • Pycharm增加新安装Python的路径
  • 题解 P2626 【斐波那契数列(升级版)】
  • IP地址的分类
  • [译]CSS 居中(Center)方法大合集
  • css系列之关于字体的事
  • Date型的使用
  • opencv python Meanshift 和 Camshift
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Vue官网教程学习过程中值得记录的一些事情
  • 高程读书笔记 第六章 面向对象程序设计
  • 基于 Babel 的 npm 包最小化设置
  • 异常机制详解
  • linux 淘宝开源监控工具tsar
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • PostgreSQL之连接数修改
  • Prometheus VS InfluxDB
  • ​一些不规范的GTID使用场景
  • #pragma once
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (十五)使用Nexus创建Maven私服
  • (转) Face-Resources
  • .net 4.0发布后不能正常显示图片问题
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .Net MVC + EF搭建学生管理系统
  • .Net Redis的秒杀Dome和异步执行
  • .NET 设计模式初探
  • .net 使用ajax控件后如何调用前端脚本
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET项目中存在多个web.config文件时的加载顺序
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • []指针
  • [Android]使用Android打包Unity工程
  • [EULAR文摘] 利用蛋白组学技术开发一项蛋白评分用于预测TNFi疗效
  • [iOS]-NSTimer与循环引用的理解
  • [JavaEE系列] Thread类的基本用法
  • [LeetCode]-225. 用队列实现栈
  • [LeetCode]-225. 用队列实现栈-232. 用栈实现队列
  • [NLP] LlaMa2模型运行在Mac机器
  • [NOIP2015] 运输计划