Метод .map() последовательно перебирает все элементы массива. То есть, по сути, представляет из себя цикл for, где переменная цикла изменяется от индекса первого элемента до последнего.
Этот метод может передавать в callback функцию 3 элемента:
В примере #1 приводится умножение кажного элемента массива на 2. То есть callback функция каждый раз возвращает элемент массива, умноженный на 2.
В примере #2 проводится исследования параметров метода. Поэтому callback функция ничего не возращет, а только выводит на печать передаваемые её параметры. В каждом цикле это: значение элемента массива, его индекс и сам массив.
var arr = [1, 2, 3];
// example #1
var arr2 = arr.map(x => x * 2); // [ 2, 4, 6 ]
// example #2
var arr2 = arr.map((x, y, z) => {
console.log(x + "|" + y + "|" + z);
});
// 1|0|1,2,3
// 2|1|1,2,3
// 3|2|1,2,3
Скрипты, представленные ниже, обрабатывают один и тот же массив двумя способами:
1.) с помощью цикла for
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var arrM = ss.getRange(1, 1, 10).getValues(); // [[10. Will Smith: $35 million], [9. Paul Rudd: $41 million], [8. Chris
var arrW = ss.getRange(14, 1, 10).getValues(); // [[10. Ellen Pompeo: $22 million], [9. Charlize Theron: $23 million], [8.
var arr = arrM.concat(arrW);
for (var i = 0; i < arr.length; i++) {
arr[i][0] = arr[i][0].replace(":", "").replace("$", "").replace(" (tie)", "(tie)").replace(" Jr", "Jr"); //
arr[i] = arr[i][0].split(' '); // [10., Will, Smith, 35, million]
arr[i][1] = arr[i][1] + " " + arr[i][2]; // [10., Will Smith, Smith, 35, million]
arr[i].splice(2, 1); // [10., Will Smith, 35, million]
if (i < 10) {
arr[i][3] = 'man';
} else {
arr[i][3] = 'woman';
};
};
arr.sort(function(a, b) {
return b[2] - a[2];
});
for (var i = 0; i < arr.length; i++) {
arr[i][0] = i + 1;
Logger.log(arr[i]);
};
ss.getRange(2, 6, arr.length, arr[0].length).setValues(arr);
2.) и с помощью метода .map():
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var arrM = ss.getRange(1, 1, 10).getValues(); // [[10. Will Smith: $35 million], [9. Paul Rudd: $41 million], [8. Chris
var arrW = ss.getRange(14, 1, 10).getValues(); // [[10. Ellen Pompeo: $22 million], [9. Charlize Theron: $23 million], [8.
var arr = arrM.concat(arrW);
var arr2 = arr.map(x => x[0].replace(":", "").replace("$", "")
.replace(" (tie)", "(tie)").replace(" Jr", "Jr")
.split(' ')); // [ [ '10.', 'Will', 'Smith', '35', 'million' ],
arr = arr2.map(x => [x[2], x[1] + ' ' + x[2], x[3], x[4]]);
arr = arr.map((x, i) => {
(i < 10) ? x[3] = 'man' : x[3] = 'woman' ;
return x;
}); // [ [ 'Smith', 'Will Smith', '35', 'man' ],
arr.sort((a, b) => a[0].localeCompare(b[0])); // [ [ '1.', 'Dwayne Johnson', '89.4', 'man' ],
arr = arr.map((x, i) => {
x[0] = i + 1;
return x;
});
console.log(arr);
ss.getRange(2, 6, arr.length, arr[0].length).setValues(arr);
Дополнительную информацию вы можете найти в этом видео: