我正在尝试将一个数组分解为几个不同的数组,以将信息粘贴到几张纸上。我无法使用单独的数组(sheetCheck)动态过滤我的主数据数组(bigArray)。如果我输入静态过滤器,即“02A”,过滤器就会起作用。如何修改我的过滤器以接受变量信息?
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;
}
}
最佳答案
你不能这样称呼
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);
}
如果我没有正确理解任务,我深表歉意。
关于javascript - 使用可变滤波器过滤二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55659272/