首页 > 其他分享 >.NET LINQ和es6的对比

.NET LINQ和es6的对比

时间:2022-08-29 20:46:14浏览次数:57  
标签:es6 map items 前端 xxx LINQ Where NET 方法

前言

前后端采用不同的开发语言,作为后端开发为主的开发人员,了解两种语言的不同点更有助于快速了解和熟悉前端的开发;

本编主要是做后端linq和前端es6的对比,了解linq在后端的操作,如何在前端也实现同样的操作;

 

详细内容:以下方法,首字母大写是后端方法,首字母是小写是前端方法

1)后端 Where().Select()   VS  前端 map()
map方法可以实现Where().Select() 

  比如:xxx.map(m => { 

    if(m.a == '1') return { c = m.b }

  })

map方法可以单独实现.Select()  

  比如:xxx.map(m => {  return m.a })

map方法可以单独实现.Where()  

  比如:xxx.map(m => {  if(m.a == '1') return m })

map方法可以单独实现.Foreach()  

  比如:xxx.map(m => {  if(m.a == '1') {  //todo  } })

ps:map的功能很多,但是它的主要功能是生成一个新的数组,所以它在单独实现.Where() 时性能不如filter(), 在单独实现.Foreach()  时性能不如foreach(),所以最好是在Where().Select() 和 .Select() 时用就好了,进一步来说有.Select()的需求才会用到map(),其他时候用对应的更适合的方法;

 

2)后端 Where()  VS  前端 filter()

filter方法可以实现Where()

  比如:let items = xxx.filter(m => m.a == '123');    // items is Array

 

3)后端 FirstOrDefault()  VS  前端 find()

find方法可以实现FirstOrDefault()

  比如:let item = xxx.find(m => m.a == '123');    // item is Object

 

4)后端 Any()  VS  前端 some()

some方法可以实现Any()

  比如:if(xxx.some(m => m.a == '123'))  {

    // todo 

  }

 

5)后端 All()  VS  前端 every()

every方法可以实现All()

  比如:if(xxx.every(m => m.a == '123'))  {

    // todo 

  }

 

6)后端没有的indexOf,findIndex

如果你已经有了一个数组中的一个对象,indexOf方法可以查找到这个对象在数据中的下标

  比如:let index = items.indexOf(item)  // items is Array, item is Object

如果你已经有了一个数组中的一个对象,findIndex方法可以查找到这个对象的id(某个元素)在数据中的下标,从而还可以判断这个对象是否在数组中存在 

  比如:let index = items.findIndex(m => m.a === '123')  // index is int,  not found is return -1;
     if(index < 0) {

      //todo not found thing

     }
ps:我们系统中有很多把findIndex当做返回bool来用,导致返回值是0时,判断结果是相反的;如果想判断对象是否存在,更应该用find()方法,当然用filter(), some(), map()也都能实现;

 

7)后端Lambda  VS  前端箭头函数 

以上方法我们都有用到箭头函数 => ,类似于后端的lambda函数,
相对于前端的function定义来说,避免了this作用域被修改的问题,也就是箭头函数内的this与箭头函数外的作用域是一样的,总而言之就是让你放心的使用this,而不用担心this会被修改;
ps:有个瑕疵的地方是,运行状态下箭头函数的书写和运用都挺好,但是debugger下的this在箭头函数里鼠标放在this上却显示未定义之类的报错,这个时候还是在最外层声明let that = this来调试吧;

 

8)后端数组的判断、可空类型的判断 

数组 items.HasElement()                             替换 items != null && item.Any()  或者  items != null && items.Count > 0,理由是输入太长
字符串  str.HasValue()                                 替换 !string.IsNullOrEmpty(str) , 理由是不光太长,很多时候都是输入了str,想起要判断非空,又得从头开始写怪异的 !string.
可空布尔 flag.IsTrue()  flag.IsFalse()           替换 !(flag ?? false) ,理由乍看之下,语义不明,就算大概了解也得想一下这是判断'非'还是'是'
ps: 多用扩展方法去实现简洁的功能,这样大家去写代码的时候会很容易发现有这些好用的方法;敲不出来的用alt+enter快捷键提示,前提是有人帮你写好扩展了,HasValue()是官方的扩展;

 

9)前端对象非空判断 

== 与 === 是不同的方法,==涉及类型转换,===不涉及类型转换;
判断一下以下条件: F12中试一下

if(0) 
if('0')
if('0' == false)

if('1' == 1)
if('0' == 0)
if('' == false)
如何判断一个变量是否为'非空'值
如何判断一个数组是否为'非空'值


分割线:

如何判断一个数组是否为'非空'值: if(items && items.length > 0)
如何判断一个变量非数组是否为'非空'值: 当v不能是int且为0值时,if(v) ;当v可能是int且为0值时,if(v && v !== 0)
if(v) 到底涵盖哪些判断:'', null, undefined...
==的类型转换有哪些特殊情况:
1.  比较的两边中有bool,会把 bool 先转换为对应的 number,即 0 和 1 ;
2.  比较的双边中有一边为number, 一边为string,会把string转换为number ;
3.  string直接转换为bool的时候,空字符串‘'转换为 false,除此外的一切字符串转换为 true ;

 

标签:es6,map,items,前端,xxx,LINQ,Where,NET,方法
From: https://www.cnblogs.com/willardzmh/p/16636970.html

相关文章

  • asp.net上传文件夹的解决方案
    ​ 1 背景用户本地有一份txt或者csv文件,无论是从业务数据库导出、还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工、挖掘和共创应用的时候,首先要将本地文......
  • 为什么 .NET应用推荐使用 await、async异步编程?
    前言 1、什么是async/await?await和async是.NETFramework4.5框架、C#5.0语法里面出现的技术,目的是用于简化异步编程模型。2、async和await的关系?async和await是成对......
  • 记一次 .NET 某金融企业 WPF 程序卡死分析
    一:背景1.讲故事前段时间遇到了一个难度比较高的dump,经过几个小时的探索,终于给找出来了,在这里做一下整理,希望对大家有所帮助,对自己也是一个总结,好了,老规矩,上WinDBG说......
  • .NET代码审计之bin目录任意访问
    0x01案例一bin目录在.NET下默认不允许通过HTTP请求访问,如果想设置能访问的话,通过移除<requestFiltering>标签内的<hiddenSegments>即可,黑盒扫描的时候记得要扫一下bin目......
  • docker部署.net core3.1项目
    前提:开发工具vs2022或者2019.netcore版本3.1centos7.51.开发项目注意数据库连接字符串的配置方式,默认mysql是用docker运行的,ip直接换成mysql容器名称即可。修改apps......
  • LINQ经典面试案列
    题目:统计一个字符串中每个字母出现的频率(忽然大小写),然后按照从高到低输出频率高于2次的单词和出现的频率。 代码:stringstrabc="hellochenchenisme,areyouok?"......
  • Netty客户端使用以及重连
    Netty客户端使用以及重连1.pom依赖<dependency><groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.30.Final</version></dependen......
  • uniapp+.net core 小程序获取手机号
    获取手机号从基础库2.21.2开始,对获取手机号的接口进行了安全升级,以下是新版本接口使用指南。(旧版本接口目前可以继续使用,但建议开发者使用新版本接口,以增强小程序安全性......
  • 【ubuntu18.04 Server】解决Failed to restart network.service: Unit network.servic
    1、问题配置静态IP时,报错Failedtorestartnetwork.service:Unitnetwork.servicenotfound.  2、解决办法sudoapt-getinstallnetwork-manager  参考......
  • Ubuntu18.04 开机卡“A start job is running for wait for network to be Configured
    Ubuntu开机卡在这里迟迟无法开机,要等倒计时完以后才会顺利开机。原因可能是系统开机初始化网络配置出错,加上系统默认配置有等待时间,导致系统会一直进行一些无用的尝试,直到......