I'm very new to JavaScript, and have only recently started fiddling with coding.
I had found a question that is similar to what I'm asking, so I've tried to modify the suggestions to fit my needs, but am drawing a blank pulling together other resources to understand the solution. That question and answer is here: range.getValues() With specific Date in Specific Cell
I hope to ask my question by adding it to that thread, but I'm unable to make a comment - only an Answer, as I have zero votes.
I want to know how I can use the range.setValues() function, but specify only rows of cells that fit a certain criteria (e.g. cell in column B = 1).
Mostly I understand the answer, I think - push the full list of data into another array, then use a for loop to identify which rows to "keep".
However, I don't understand a good chunk of the solution, specifically this portion:
data.forEach(function(row) {
  var colHvalue = row[7];
  var colKvalue = row[10];
  if( /* your desired test */) {
    // Add the name of the sheet as the row's 1st column value.
    row.unshift(sheetName);
    // Keep this row
    kept.push(row);
  }
});
where I'm confused:
- What's - function(row)refer to? It seems to me that "row" is not a defined variable, and is also not a method.
- What are the objects being specified in the line - var colHvalue = row[7];? And same for the second row.
- How does the - pushing and- unshifting work?
Hope for some answers, thanks!
Edit:
So I still don't understand the detailed logic of the Answer to that other question, and wrote something else based off that:
 function importtest() {
  var sheetX = SpreadsheetApp.openById("XXX-XXX-XXX"); // workbook containing orginal data
  var tabX = sheetX.getSheetByName("EXPORTER"); // tab containing original data
  var rangeX = tabX.getRange(6,2,sheetX.getLastRow(),sheetX.getLastColumn()).getValues(); //range of full original data
var kept = [] ;
var data = rangeX ; //storing full data in "data"
// define function "latestrows", which fills up the "kept" array with selected rows
function latestrows() {
  var datesent = data[i][2] ; // indicating dynamic cell position (using variable i)  that determines if should be kept or not
  var datarow = data[i] ; // specify the entire row of data
  // loop statement; starting with i=0 (or row 1), and increasing until the last row of "data"
  for ( i = 0; i < data.length ; i++) {
    if (datesent == 1) { // if cell in the col indicating if it should be kept, is "1"
      kept.push(datarow); //move the chosen rows of data into "kept"
    }
  }
}
  var sheetX3 = SpreadsheetApp.openById("XXX-XX-XX"); // workbook import destination
  var tabX3 = sheetX3.getSheetByName("IMPORTED"); // import destination tab
  var rangeX3 = tabX3.getRange(7,3,kept.length,kept[0].length) // imported array range
  rangeX3.setValues(kept); // set values
 }
I get the error message TypeError: Cannot read property "length" from undefined. (line 31, file "Code"), which together with testing other modifications indicates to me that kept is empty. What am I missing? 
