ouxch 最近的时间轴更新
ouxch

ouxch

V2EX 第 494925 号会员,加入于 2020-06-16 12:25:15 +08:00
52 S 6 B
ouxch 最近回复了
12 R7TTNT67F4F9 已用,感谢分享👍🏻
76 天前
回复了 shuxhan 创建的主题 问与答 6500 以内预算的笔记本?
6500 以内,不考虑 mba 的话,推荐楼主看看『华为 MateBook 13s 云杉绿』
135 天前
回复了 tomari 创建的主题 分享发现 求有趣的中文 podcast(播客)推荐?
无聊斋
135 天前
回复了 tomari 创建的主题 分享发现 求有趣的中文 podcast(播客)推荐?
最笨的办法当然就是写几个条件分支来组装最终的查询条件,例如:

```javascript
const filter = { nickname: { $regex: nicknameReg } }
if (!!id) fiter._id = ObjectId(id)
if (!!status) fiter.status = status
const findList = await userModel.find(filter)
```

---

其实这是一个如何让编码更加优雅的问题,不只适用于此处你这个问题,如果从事`JavaScript`开发,建议了解下函数式编程,这里以函数式编程库 [ramda]( https://ramda.cn/) 为例,看看写出来又是怎样的:

<br/>

首先定义一个通用的纯函数 `omitNil`

```javascript
const { reject, isNil } = require('ramda')
const omitNil = reject(isNil)
```

做个解释:

`isNil` 和 `reject` 都是 **ramda** 直接提供的函数,并且 **ramda** 的函数都是自动柯里化的;
`isNil` 的作用:检测输入值是否为 `null` 或 `undefined`;
`reject` 的作用:可视为 `filter` 的补操作,简言之 `filter` 是留下满足条件的元素、`reject` 是排除满足条件的元素;

将 `reject` 和 `isNil` 进行组合,得到 `omitNil` 函数,它的作用是:排除掉值为 `null` 或 `undefined` 的元素


做一个简单直观的测试,看看 `omitNil` 函数的作用:

```javascript
const obj = { a: 1, b: null, c: undefined }
omitNil(obj) // => { a: 1 }
obj // => { a: 1, b: null, c: undefined }

const arr = [1, null, undefined]
omitNil(arr) // => [ 1 ]
arr // => [1, null, undefined]
```

可以看到,`omitNil` 的返回值和输入参数相比,少了值为 `null` 或 `undefined` 的元素,并且没有修改原输入参数

<br/>

**现在回到楼主的问题**,就可以一行代码实现了:

```javascript
const findList = await userModel.find(omitNil({ nickname: { $regex: nicknameReg }, _id: id, status }))
```

<br/>

最后,**ramda** 的核心设计理念就包含了:数据不变性和函数无副作用,因此以上纯函数均不会改变输入参数的值。

<br/>

> 参考:
>
> https://ramda.cn
>
> https://ramdajs.com/
138 天前
回复了 182247236 创建的主题 MySQL MySQL 查询数据太慢了,该怎么优化?
初看这个问题,从已提供的信息来看,只修改 sql 应该就能得到很大的优化,对索引调整可进一步优化。
如不介意提供下:表结构语句、行数、期望输出、数据库实例(所在机器)的 CPU 核心数和内存大小
195 天前
回复了 CaptainD 创建的主题 机械键盘 键盘选择, TTC or 阿米洛静电容
在上家公司也用过一段时间阿米洛的静电容,第一次体验蛮惊艳的。
换了家公司这边的后台程序员清一色 NIZ plum ,感觉就是之前的阿米洛也不算啥了。现在这键盘直接提升我打字的欲望。
1. 开发者模式打开,装 adblock plus 插件,点击插件选择捕获元素,然后就一直屏蔽了
2. 如果系统设置了代理的话,可以加 rule,把广告相关的请求都 reject

另外这个狗皮膏药我几个月前就遇到了,怎么这几天就突然讨论多了起来,V 站已经看到 3 个相关的主题了😂
318 天前
回复了 acrisliu 创建的主题 iOS 吐槽一下 iOS 的 Files 应用
1. 自带的 files 确实难用
2. 你用的 nplayer 我也用过,后来发现一个更好用的 infuse,特别是传文件特好用,上几张图看看
https://i.loli.net/2021/07/04/D7lsUb2TIYVGHp9.png
319 天前
回复了 tesorouo 创建的主题 问与答 Ngrok 有哪些同等用户体验的替代?
frp,灵活自由,有 dashboard,小水管体验没那么好;
teamviewer,稳定流畅,免费 license 限制设备数量;
utools 的内网穿透插件,操作简单带宽够大,一段时间无连接后会自动断开。
关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1214 人在线   最高记录 5497   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 15ms · UTC 22:52 · PVG 06:52 · LAX 15:52 · JFK 18:52
Developed with CodeLauncher
♥ Do have faith in what you're doing.