当前位置: 首页 > 知识库问答 >
问题:

javascript - js:求一个数据处理方法?

奚才良
2023-07-25
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_.*的场景,哪位大佬可以帮忙完善下吗?

共有6个答案

冯鸿哲
2023-07-25

思路,找 . 的位置,分割出前缀。在 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 里有多项的情况要麻烦点。

裘安阳
2023-07-25
  tableList = tableList.map(item => {      item = item.replace(/account[.]/g, "")      return item    })
贲绪
2023-07-25

你是要去除以databaseList里的字符开头的?

databaseList.map(prefix => tableList.map(str => str.replace(RegExp(`^(${prefix}\\.)+`), '')))
汪翰墨
2023-07-25
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;});
容寒
2023-07-25
// 处理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);

高朝明
2023-07-25

这不需要正则表达式吧,直接用 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,这个数自定义输入的 麻烦各位大佬帮忙看看