I want to move filtered data from one sheet to a different sheet.
I can do this for a single filtered value ex: Money
but I want to filter on multiple values from an array ex: ["Money", "Society", "Impacts"]
I can not figure out how to loop through the filterValues
array and collect all the values from the different filterValues.
I just get the filtered values of rawData for the last value in filterValues
I can do this a different way but I am trying to get a better understanding of filtering
function myFunction() {
var filterValues = ["Money", "Society"]; //filter values.
var col = 5; // column "E".
var sheetName = "Elements";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sht = ss.getSheetByName(sheetName);
var rng = sht.getDataRange();
var rawData = rng.getDisplayValues();
var out = rawData.filter(dataFilter);
function dataFilter(arr) {
return arr[col-1]== filterValues;
}
const osh=SpreadsheetApp.getActive().getSheetByName("A");
osh.clear();
osh.getRange(1,1,out.length,out[0].length).setValues(out);
};
tried this
for (var i = 0; i <= filterValues.length-1; i++) {
var out = rawData.filter(dataFilter);
function dataFilter(arr) {
return arr[col-1]== filterValues[i];
}
}
You can use array.includes() to check if the current row column e value is listed in your filterValues
for your array filter function.
function myFunction() {
var filterValues = ["Money", "Society"]; //filter values.
var col = 5; // column "E".
var sheetName = "Elements";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sht = ss.getSheetByName(sheetName);
var rng = sht.getDataRange();
var rawData = rng.getDisplayValues();
var out = rawData.filter(dataFilter);
function dataFilter(arr) {
return filterValues.includes(arr[col-1]);
}
Logger.log(out);
const osh=SpreadsheetApp.getActive().getSheetByName("A");
osh.clear();
osh.getRange(1,1,out.length,out[0].length).setValues(out);
};
filterValues
array.Source Sheet: Elements
Destination Sheet: A