网站首页 > 基础教程 正文
查询表单,一次输入多个参数,一般是从网站或者excel中复制,要求前端用空格、逗号或者回车切割参数,传给后端。
这个需求也很常见,之前是先用 split 分隔成数组,再用 map 遍历去掉首尾空格,最后再用 filter 来过滤下空值,但是这样需要遍历两次,如果想只用一个 map 实现,那还得额外定义个变量来储存数据。
其实像这种组装数据直接用 reduce 就能完美解决,一般有的后端要求用户没填的参数就不传,不需要传个空字符串或者空数组这种,那我们reduce的初始值直接给成 undefined 就不会传给后端了,不过注意 push 的时候就要额外判断下了,否则会报错。
用回车、中英文逗号或空格分隔字符正则:/\n+|,|,|\s+/g
利用 reduce 过滤组装数据 demo:
let a = [' ', '1 ', 'zhou', ' ']
let b = a.reduce((m, n) => {
if (n) {
const txt = n.trim()
if (txt) m.push(txt)
}
return m
}, [])
console.log(b) // ['1', 'zhou']
项目中使用完整示例代码:
// 请求数据
async query() {
const { orderIds, names } = this.queryForm
let params = {
page: this.page.index,
size: this.page.size,
}
this.fmtParams(params, 'orderIds', orderIds)
this.fmtParams(params, 'names', names)
const res = await this.$axios({
method: 'post',
url: 'cafe123/api/info',
data: params,
})
if (res.success) {
console.log(res)
}
}
// 格式化参数
fmtParams(params, key, val) {
// if (val) {
// params[key] = val.split(/\n+/g).map(a => a.trim()).filter(a => a)
// }
if (val) {
// 初始值设为 undefined,未填写有效数据时不需要传参数,如都是敲的空格、回车
// 以回车、中英文逗号或空格分隔
const list = val.split(/\n+|,|,|\s+/g)
params[key] = list.reduce((m, n) => {
if (n) {
const txt = n.trim()
if (txt) {
if (!m) m = []
m.push(txt)
}
}
return m
}, undefined)
}
}
猜你喜欢
- 2024-10-11 javascript函数式编程基础指北 js函数式编程指南
- 2024-10-11 使用函数化的Javascript代码编写方式
- 2024-10-11 开源中的精品,具备丰富Excel处理能力的Javascript库——exceljs
- 2024-10-11 提升十倍效率的10个js常用函数 js 函数提升
- 2024-10-11 JavaScript函数式编程指南(一) js 函数式编程指南
- 2024-10-11 在查询中拆分字段中的字符串 查询表中某个字段
- 2024-10-11 JavaScript奇技淫巧:Hook与反Hook
- 2024-10-11 你知道javascript函数的回调怎么用吗?
- 2024-10-11 js工具函数库func-package中Versions用法介绍
- 2024-10-11 Power Query中从JSON中提取多列数据,按时间顺序做折线图
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)