首页 > 其他分享 >扩展运算符...+map+filter 在嵌套对象数组中的使用

扩展运算符...+map+filter 在嵌套对象数组中的使用

时间:2024-02-27 15:58:14浏览次数:28  
标签:filter name map ee value 运算符 cardAuth subAuth

参考文档:

初始数据如下: 

const cards =  [
                {
                    name: "myMember",
                    nameZH: "我的会员卡",
                    cardAuth: 1,
                    value: [
                        {
                            name: "预约",
                            subAuth: "update",
                        },
                        {
                            name: "查询",
                        }
                    ]
                },
                {
                    name: "oilStationManage",
                    nameZH: "历史记录",
                    cardAuth: 0,
                    value: [
                        {
                            name: "消费记录",
                            subAuth: "read",
                        },
                        {
                            name: "交易记录",
                            subAuth: "read",
                        },
                    ]
                },
                {
                    name: "workersManage",
                    nameZH: "员工管理",
                    cardAuth: 1,
                    value: [
                        {
                            name: "销售员工",
                            subAuth: "read",
                        },
                        {
                            name: "技术员工",
                        }
                    ]
                }
            ];

 我想找出 cardAuth==1、有“subAuth”属性的值组成的数组,也就是:

输出结果

[
    {
        name: "myMember",
        nameZH: "我的会员卡",
        cardAuth: 1,
        value: [
            {
                name: "预约",
                subAuth: "update",
            },
        ]
    },
    {
        name: "workersManage",
        nameZH: "员工管理",
        cardAuth: 1,
        value: [
            {
                name: "销售员工",
                subAuth: "read",
            },
        ]
    }
]

 我在 https://segmentfault.com/q/1010000042989861 找到了一个完全符合我要求的答案,但是代码看上去很复杂,在这里记录一下代码解释:

 先验知识:

  • js 判断对象中是否存在某个属性可以用 in 和 hasOwnProperty 
var obj = { a:2 }; 

("a" in obj); // true 
("b" in obj); // false 

obj.hasOwnProperty( "a" ); // true 
obj.hasOwnProperty( "b" ); // false
  •  扩展运算符 ...

定义: 扩展运算符(...)是ES6的语法,用于取出参数对象的所有可遍历属性,然后拷贝到当前对象之中。

自定义的属性在拓展运算符后面,则拓展运算符对象内部同名的属性将被覆盖掉。
let person = {name: "Amy", age: 15};
{ ...person, name: "Mike", age: 17}; // {name: 'Mike', age: 17}

 代码解释:

  1. 过滤出 cardAuth == 1 的值, 用  let authCards = cards.filter(card=>card.cardAuth == 1) 
  2. 在第一步的基础上,过滤二级对象的数组属性值   authCards.map(e=>{ return {...e,value:e.value.filter(ee=>"subAuth" in ee)} }) 

  cards.filter(card=>card.cardAuth == 1)  运行结果:

 authCards.map(e=>{ console.log(e); }) 

  authCards.map(e=>{ console.log(e.value) }) 

authCards.map(e=>{
   e.value.filter(ee=>{
       if("subAuth" in ee){
           console.log(ee)
       }
   })
})

 

authCards.map(e=>{
   e.value.filter(ee=>{
       if("subAuth" in ee){
           console.log({...ee})
       }
   })
})

authCards.map(e=>{
   e.value.filter(ee=>{
       if("subAuth" in ee){
           console.log({...ee,subAuth:666})
       }
   })
})

authCards.map(e=>{
  return {...e,value:e.value.filter(ee=>"subAuth" in ee)}
})

 

标签:filter,name,map,ee,value,运算符,cardAuth,subAuth
From: https://www.cnblogs.com/sunshine233/p/18037011

相关文章

  • List转Map
    //以userid为主,重复数据不获取,不会抛出异常Map<Long,UserLoginLog>longDateMap=userLoginLogList.stream().collect(Collectors.toMap(UserLoginLog::getUserId,Function.identity(),(key1,key2)->key1));//业务逻辑if(longDateMap.containsKey(listVo.getUserI......
  • unipp实现map地图轨迹,轨迹长度,标点,连线功能
    效果图 一、pages.json文件中加入{"path":"pages/map/mapd","style":{"navigationBarTitleText":"地图","app-plus":{......
  • 2024年Apache DolphinScheduler RoadMap:引领开源调度系统的未来
    非常欢迎大家来到ApacheDolphinScheduler社区!随着开源技术在全球范围内的快速发展,社区的贡献者“同仁”一直致力于构建一个强大而活跃的开源调度系统社区,为用户提供高效、可靠的任务调度和工作流管理解决方案。在过去的一段时间里,我们取得了一些重要的成就,但我们的愿景远未实......
  • 零拷贝,mmap 和 sendFile
    传统的IOmmapmmap是一种内存映射技术,mmap相比于传统的IO来说,其实就是少了1次CPU拷贝而已,上图。sendFile在Linux中,提供sendFile函数,实现了零拷贝......
  • uniapp nvue页面 map地图全屏设置
    因为nvue页面:100vh以及百分比不可用,所以1,可以获取当前屏幕高度然后赋值<map:latitude="latitude":longitude="longitude":style="'height:'+windowHeight*2+'rpx;'"></map>const{windowWidth,windowHeight,appName}=......
  • SpringBoot:通过实现自定义接口获取实现类的@RequestMapping注解请求路径
    1.自定义接口//什么都不用写,就定义一个空接口publicinterfaceMyMark{}2.Controller接口类实现自定义接口@RestControllerpublicclassDayControllerimplementsMyMark{@RequestMapping("/day1")publicStringget1(){return"day1";}......
  • filter拦截与放行
    @WebFilter(urlPatterns="/*")publicclassLoginChechedFilterimplementsFilter{//拦截方法,只要资源链接被拦截就会触发此方法@OverridepublicvoiddoFilter(ServletRequestservletRequest,ServletResponseservletResponse,FilterChainfilterChain)throwsIO......
  • Java HashMap merge() 方法
    在3020.子集中元素的最大数量【力扣周赛382】用哈希表统计元素个数使用点击查看代码classSolution{publicintmaximumLength(int[]nums){Map<Long,Integer>cnt=newHashMap<>();for(intx:nums){cnt.merge((long)x,1,In......
  • Go - #70: Using mutexes inaccurately with slices and maps
      ......
  • NavigableMap.headMap()的用法
    Java中NavigableMap接口的headMap()方法用于返回此Map的一部分,其键小于(或等于,如果包含,则为true)toKey的map NavigableMap<K,V>headMap(KtoKey,booleaninclusive)参数:此函数接受两个参数:toKey:此参数指的是key。inclusive:此参数决定是否......