Javascript 使用可变过滤器过滤二维阵列
我正在尝试将一个数组拆分为几个不同的数组,以便将信息粘贴到多个页面上。我无法使用单独的数组(sheetCheck)动态筛选我的主数据数组(bigArray)。如果我输入一个静态过滤器,即“02A”,过滤器工作。如何修改筛选器以接受变量信息Javascript 使用可变过滤器过滤二维阵列,javascript,arrays,multidimensional-array,google-apps-script,google-sheets,Javascript,Arrays,Multidimensional Array,Google Apps Script,Google Sheets,我正在尝试将一个数组拆分为几个不同的数组,以便将信息粘贴到多个页面上。我无法使用单独的数组(sheetCheck)动态筛选我的主数据数组(bigArray)。如果我输入一个静态过滤器,即“02A”,过滤器工作。如何修改筛选器以接受变量信息 function testArray (){ var ss = SpreadsheetApp.getActiveSpreadsheet(); //Get full array of Budget Pricing Breakdown Sheet va
function testArray (){
var ss = SpreadsheetApp.getActiveSpreadsheet();
//Get full array of Budget Pricing Breakdown Sheet
var originalArray = ss.getRangeByName('XxTestRange').getValues();
//Delete unused columns from array. Only Leaves sheetNumber, description, qty, UM, unitCost
var newArray = originalArray.map(function(row){return[row[0],row[5],row[6],row[7],row[10]];});
//Delete unused rows that have a value of X in the sheetNumber
var bigArray = newArray.filter(function(item){return item[0] != "X";});
//Get array of Applicable Tabs
var originalSheetsArray = ss.getRangeByName('XxTestRange2').getValues();
//Remove unused column
var newSheetsArray = originalSheetsArray.map(function(row){return[row[0],row[2]];});
//Delete not applicable rows
var sheetCheckBad = newSheetsArray.filter(function(item){return item[1] != "Not Applicable"});
//Separate just appicable trades
var sheetCheck = sheetCheckBad.map(function(row){return[row[0]];});
for (var i=0; i<sheetCheck.length;i++){
var sheetNumber = sheetCheck[i];
//Logger.log(sheetNumber)
var pasteArray = bigArray.filter(function(item, sheetNumber){return item[0] == sheetNumber})
//var pasteArray = bigArray.filter(filterSheetLogic)
Logger.log(sheetNumber);
Logger.log(pasteArray);
}
}
//Pull individual Arrays based on sheet numbers
var filterSheetLogic = function(item, sheetNumber){
if (item[0] == sheetNumber){
return true;
} else {
return false;
}
}
函数测试阵列(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
//获取预算定价明细表的完整数组
var originalArray=ss.getRangeByName('XxTestRange').getValues();
//从数组中删除未使用的列。仅留下sheetNumber、description、qty、UM、unitCost
var newArray=originalArray.map(函数(行){return[row[0],row[5],row[6],row[7],row[10]];});
//删除sheetNumber中值为X的未使用行
var bigArray=newArray.filter(函数(项){return item[0]!=“X”});
//获取适用选项卡的数组
var originalSheetsArray=ss.getRangeByName('XxTestRange2').getValues();
//删除未使用的列
var newSheetsArray=originalSheetsArray.map(函数(行){return[row[0],row[2]];});
//删除不适用的行
var sheetCheckBad=newSheetsArray.filter(函数(项){返回项[1]!=“不适用”});
//分开公正适用的交易
var sheetCheck=sheetCheckBad.map(函数(行){return[row[0]];});
对于(var i=0;i你不能这么说
bigArray.filter(function(item, sheetNumber) ...
因为过滤器的回调有自己的参数。在这种情况下,sheetNumber
始终等于数组的索引0
,1
,2
等
我的案例是构建一个结构来生成一个有效的回调
/**
* The big array filter's builder. It's a fabric
* @param {string} sheetNumber
* @returns {object} The filter's callback
*/
var filterBuilder_ = function(sheetNumber) {
return function(item, _, __) {
return item[0] == sheetNumber;
};
};
在此之后,将主循环更改为
for (var i = 0; i < sheetCheck.length; i++) {
var sheetNumber = sheetCheck[i][0];
var bigArrayfilter = filterBuilder_(sheetNumber);
var pasteArray = bigArray.filter(bigArrayfilter);
Logger.log(sheetNumber);
Logger.log(pasteArray);
}
for(变量i=0;i
如果我没有正确理解任务,我深表歉意。为了正确理解您的情况,您能提供所需输入和输出的示例值吗?我相信OP正在询问如何能够将变量sheetnumber作为函数参数var pasteArray=bigArray.filter(函数(项,sheetnumber){返回项目[0]==sheetNumber})
因为粘贴数组当前在所有迭代中都为空。如果其中一个删除了变量sheetNumber,该函数将正常工作。我只使用了11列数字。这是一个指向示例电子表格的链接。我正在使用数组过滤器将预算定价明细表中的数据拆分为单独的数组,可以粘贴到其他列表中标题为02A、03A、…、04A的工作表。工作表的完整版本复制了预算定价明细表中的数百行,并将其分发到100多张工作表中。@Cooper您完全正确。删除sheetNumber变量修复了我的问题。感谢您的帮助!