const tableList = [ "account.t_account", "account.t_account_ext", "account.t_sub_account", "account.t_sub_account_.*", "account.account.t_sub_account", "t_sub_accountok"]const databaseList = [ "account"]
js:求一个数据处理方法,例如上述例子, tableList处理之后,可以得到
[ "t_account", "t_account_ext", "t_sub_account","t_sub_account_.*" "t_sub_account", "t_sub_accountok"]
之前有如下方案
function format() { const formattedTableList = []; for (let i = 0; i < tableList.length; i++) { const tableName = tableList[i].split('.'); formattedTableList.push(tableName); } return formattedTableList.filter((item) => item !== '.');}
但是不能兼容account.t_sub_account_.*的场景,哪位大佬可以帮忙完善下吗?
思路,找 .
的位置,分割出前缀。在 databaseList
去找是否有此前缀,如果有,去掉,否则返回原来的 name
。
function format(tables, databases) { return tables.map(name => { const idx = name.indexOf("."); if (idx < 0) { return name; } return databases.includes(name.slice(0, idx)) ? name.slice(idx + 1) : name; });}console.log(format(tableList, databaseList));
结果
[ 't_account', 't_account_ext', 't_sub_account', 't_sub_account_.*', 'account.t_sub_account', 't_sub_accountok']
用正则表达式的方法也可以,只是处理 databaseList 里有多项的情况要麻烦点。
tableList = tableList.map(item => { item = item.replace(/account[.]/g, "") return item })
你是要去除以databaseList
里的字符开头的?
databaseList.map(prefix => tableList.map(str => str.replace(RegExp(`^(${prefix}\\.)+`), '')))
const tableList = [ "account.t_account", "account.t_account_ext", "account.t_sub_account", "account.t_sub_account_.*", "account.account.t_sub_account", "t_sub_accountok",];const databaseList = ["account"];tableList.map((item) => { databaseList.forEach((key) => { item = item.replace(new RegExp(`${key}\\.`,'g'), ""); }); return item;});
// 处理tableList函数function processTableList(tableList, databaseList) { const result = []; for (const table in tableList) { for (const database in databaseList) { // 判断table字符串是否以database开头,如果是,则进行拆分 if (table.startsWith(database + '.')) { result.push(table.split(`${database}.`)[1]); } } // 判断table字符串是否包含'.'字符,并且不在result数组中,如果是,则直接添加到result数组中 if (table.includes('.') && !result.includes(table)) { result.push(table); } } return result;}
测试
const processedTableList = processTableList(tableList, databaseList);
console.log(processedTableList);
这不需要正则表达式吧,直接用 replace都行
js数据处理 const translations = { 'editor.remove': 'Remove', 'editor.copy': 'Copy', 'editor.words': 'WORDS', 'editor.characters': 'CHARACTERS', 'editor.default': 'Default', 'editor.recent': 'Recently Used
// 最大值是1000 let num = 1000; num是最大数为1000,然后根据arr数组里面的test的值之和(3+4+5+6)为18, 1000 / 18 = 55(求整数); 然后需要得到的格式排列的数据如下: 麻烦各位大佬帮忙看看,写了循环,排列的数据格式不对,双循环的排列按顺序的话要怎么写?
let num = 600; num是最大数为600,然后根据arr数组里面的test的值之和(5+4+5+6)为20, 600 / 20 = 30; 希望得到下面的格式: 图片第一列5个输入框对应数组arr里面下标为0的test的值为5 图片第二列4个输入框对应数组arr里面下标为1的test的值为4 ... 控制1-30之间的随机数里面的输入框修改的时候只能输入1-30的数, 控制31-60之
js 数组的数据处理 这个2数字不是固定的, 如果a这个值是2 我需要得到arr为 arr = [9] 如果a这个值是4 我需要得到arr为 arr = [7,8,9] 大佬们帮我看看
id相同,ass里的数据根据 id相同,unicode 相同 ,把pearPlanFlag有属性的值加到第一个id出现的情况
arr数组最小长度是4最大是8 let num = 600;暂时写死600,这个数自定义输入的 麻烦各位大佬帮忙看看