javascript 如何将此搜索功能设置为仅显示属于该特定用户的记录?

dz6r00yl  于 2023-01-11  发布在  Java
关注(0)|答案(1)|浏览(121)

我可以使用Tanaike的方法in this thread搜索列,从而在第一次加载时为特定用户过滤掉显示的数据。搜索函数工作正常,但问题是,用户还可以在google工作表中搜索其他人的记录,只要他们搜索电子表格中存在的值。我正在想办法添加第二个&&条件,以仅显示仅与currentUser的用户名(在列C中)和搜索值匹配的行。

function displayOwnRecordSearch(currentUser, searchedValue){

var spreadsheetId   = "";
var sheetName = "";  
var column = 3;

var [, ...data] = Sheets.Spreadsheets.Values.get(spreadsheetId, sheetName).values;
var arr = [];

  if(searchedValue !== undefined) {
      const validateText = (query) => {
      let regex = new RegExp(searchedValue, 'i')
         return regex.test(query)
   }
  data.forEach(d => {
    if (validateText(d)) {
      arr.push(d);
     }
  });
  
  }else{
     const validateText = (query) => {
     let regex = new RegExp(currentUser, 'i')
         return regex.test(query)
   }
  data.forEach(d => {
    if (validateText(d[column - 1])) {
      arr.push(d);
     }
  });
 }

 return arr;
}
b1zrtrql

b1zrtrql1#

在您的情况下,如何使用fiter,如下所示?

修改的脚本:

function displayOwnRecordSearch(currentUser, searchedValue) {
  var spreadsheetId = "###";
  var sheetName = "###";
  var columnForCurrentUser = 3; // Column "C".
  var columnForSearchedValue = 5; // Column "E". This is from https://stackoverflow.com/q/75066197 (your previous question)

  var [, ...data] = Sheets.Spreadsheets.Values.get(spreadsheetId, sheetName).values;
  var arr = data.filter(r => (new RegExp(currentUser, 'i')).test(r[columnForCurrentUser - 1]) && (new RegExp(searchedValue, 'i')).test(r[columnForSearchedValue - 1]));
  // console.log(arr); // You can check the value in the log.
  return arr;
}
  • 在此修改中,我使用var columnForSearchedValue = 5;作为searchedValue的列。
  • 或者,我认为var [, ...data] = Sheets.Spreadsheets.Values.get(spreadsheetId, sheetName).values;也可以修改如下。
var sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName);
var data = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues();

参考:

相关问题