请求协助拆分数组用于SQL及简化Greasemonkey脚本数组处理
嘿,我来帮你搞定这两个数组处理的问题!先看看你拿到的WEAPONS参数格式——它是用|分隔的多组武器数据,每组又用逗号拆成三个字段,咱们一步步来解决你的需求:
一、拆分数组并适配SQL插入
要把这些数据导入SQL,核心是把字符串拆成结构化数据,再转成SQL能识别的格式:
- 第一步:拆分整个字符串为单个武器条目数组
用split('|')就能把每组武器数据分开,代码示例:const weaponsStr = "0,4674,72|1,19,71|1,370,51|2,300,75|2,239,73|3,482,74|3,354,68"; const weaponEntries = weaponsStr.split('|'); - 第二步:转成SQL批量插入格式
假设你要插入到weapons(user_id, category, weapon_id, value)这样的表(字段名可以根据你的实际表结构调整),可以生成批量插入的SQL语句:
👉 注意:如果是公开使用的脚本,建议用参数化查询避免SQL注入;如果是个人自用,转成数字已经能规避大部分风险了。// 替换成你从URL里提取的真实用户ID const userId = 4518188; // 把每个条目拆成字段并转成数字,再拼接成SQL值 const sqlValues = weaponEntries.map(entry => { const [category, weaponId, value] = entry.split(',').map(Number); return `(${userId}, ${category}, ${weaponId}, ${value})`; }).join(', '); // 最终的插入SQL const insertSql = `INSERT INTO weapons (user_id, category, weapon_id, value) VALUES ${sqlValues};`;
二、简化数组处理方案
可以用链式调用或正则表达式让代码更简洁清爽,少写冗余步骤:
- 方案1:链式调用一步生成结构化数据
把拆分、类型转换、结构化整合在一起,代码可读性拉满:const weaponsStr = "0,4674,72|1,19,71|1,370,51|2,300,75|2,239,73|3,482,74|3,354,68"; const userId = 4518188; // 一步得到结构化的武器数组,后续不管是生成SQL还是脚本内使用都方便 const processedWeapons = weaponsStr.split('|') .map(entry => entry.split(',').map(Number)) .map(([category, weaponId, value]) => ({ userId, category, weaponId, value })); // 基于结构化数组生成SQL const sqlValues = processedWeapons.map(item => `(${item.userId}, ${item.category}, ${item.weaponId}, ${item.value})`).join(', '); - 方案2:用正则一次性匹配所有字段
如果你喜欢更简洁的写法,可以用正则直接提取所有三组数字,省去多次split:const weaponsStr = "0,4674,72|1,19,71|1,370,51|2,300,75|2,239,73|3,482,74|3,354,68"; const regex = /(\d+),(\d+),(\d+)/g; // 匹配所有符合格式的字段组 const matches = [...weaponsStr.matchAll(regex)]; // 转成结构化数组 const processedWeapons = matches.map(match => ({ category: Number(match[1]), weaponId: Number(match[2]), value: Number(match[3]) }));
内容的提问来源于stack exchange,提问作者Erebus
相关产品推荐
相关产品推荐

