13.2. filter()
JavaScript Filter Method Tutorial - Google Sheets Apps Scripts - Array Methods Part 7
https://youtu.be/PT_TDhMhWsE?list=PLv9Pf9aNgemvD9NFa86_udt-NWh37efmD
filter() กสำรใชงค้ สำนตสำมชงื่อ ใช้คกรองขอค้ มลย ในอสำเรยล โดยทคื่เีง รสำสสำมสำรถเขคยี นเงืงอ่ นไขกสำรกรองเปป็นฟงฝั กชล ลัืง่นได้ค
เอง
13.2.ก.) ตวตั อยยู่างท่ีท 1
ตวลั แปร filterLogic เก็กบฟัฝงกลชงล่นัื ทคเ่ืงี ปน็ป ตวัล ประมวลกสำรกรอง พรอ้ค มกัลบรลับคู่สย ำกลลับมสำด้วค ย
function filterArr() {
var arr = [ "txt1" , 4 , 8 , 33 , 2 , "txt2" , 9 ] ;
var new_arr = arr.filter(filterLogic) ;
Logger.log(arr); // พมร พ์ต : ["txt1", 4, 8, 33, 2, "txt2", 9]
Logger.log(new_arr); // พมร พ์ต : [8.0, 33.0, 9.0] – เฉพาะค่าค มากกวาค่ 6 – ขชอ้ ความถูกบ ตลัดทีรนง้
} // End function
var filterLogic = function(item) { // ฟงัฟ ก์ชต ่ิรัลนทใีขริ่ ช้กช รอง
return item > 6 ; // คนมื เฉพาะตัลวทขีริ่มขีคค่ามากกวาค่ 6
} // End function
13.2.ข.) ตตัวอยายู่ งทีท่ 2 – ใสยู่ฟัฝงกชล น่ัทตี เป็นป Argrument
เพ่งอื ให้คโคคด้ สซันล และหสำกฟฝังกชล ่นลังื กสำรกรองไมูยย่ สำวมสำก เอสำฟัฝงกลชืงัล่นทเืคีง่ ป็ปนตวัล กรอง ยลัดลงไปใน filter() ก็กได้ค
function filterArr() {
var arr1 = [ 1 , 2 , 3 , 4 , 5 , 7 ] ;
var fData = arr1.filter(function(item){
return !(item >= 4) ; // ตลัวทีร่ขไิ มค่ >= 4
}) ;
Logger.log(fData); // พมิพ พล : [1.0, 2.0, 3.0]
} // End function
บททีขิ่ร 13 : อาเรยต์เมถอด ตระกูลบ วนลูปบ 151
13.2.ค.) ตัตวอยูา่ย งท่ที 3 - กรองตตวั เลข
function filterArr() {
var arr = [ "txt1" , 4 , 8 , 33 , 2 , "txt2" , 9 ] ;
var new_arr = arr.filter(filterLogic) ;
Logger.log(arr); // พรมพต์ : [ "txt1" , 4 , 8 , 33 , 2 , "txt2" , 9 ]
Logger.log(new_arr); // พมร พต์ : [ 8.0 , 33.0 , 9.0]
// เฉพาะคา่ค มากกว่คา 6 – ตัวล ทเ่ขีริ ปน็ป ขอ้ช ความถกูบ ตดลั ทน้งีร
} // End function
var filterLogic = function(item) {
if(item>6) // คนืม คาค่ true - เมอ่มิืร คาค่ มากกวค่า 6
{
return true ;
}
else
{
return false ;
} ; // End if
} // End function
13.2.ง.) ตวตั อยาูย่ งท่ีท 4 - กรองข้คอความ
ข้อค มลย ในอสำเรยลมทีค ซงลั ตวลั เลข และ ขอค้ ควสำมปะปนกลันอยยู่ ตลัวอยสู่ย ำงนทคีซ ดสอบกรองข้อค ควสำม
function filterArr() {
var arr = [ "txt1" , 4 , 8 , 33 , 2 , "txt2" , 9 ] ;
var new_arr = arr.filter(filterLogic) ;
Logger.log(arr); // พมร พ์ต : [ "txt1" , 4 , 8 , 33 , 2 , "txt2" , 9 ]
Logger.log(new_arr); // พรมพ์ต : [ 4.0 , 8.0 , 33.0 , 2.0 , txt2 , 9.0 ]
// อะไรท่ไีขริ ม่คใชค่ txt1 มาหมด
} // End function
var filterLogic = function(item) {
if(item == "txt1" ) // คนืม ค่าค true – อะไรทไิรี่ข มใค่ ช่ค "txt1" มาหมด
{
return false ;
}
else
{
return true ;
} ; // End if
} // End function
152 หลัลกการเขียข นโปรแกรม Google Apps Script โดย วสัลนต์ต คณุค ดรลกเศวต ([email protected])
13.2.จ.) ตตวั อยู่ยางทที่ 5 – คค้นหาในอาเรยล
Array.prototype.filter()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
ตวลั อยูสย่ ำงตอู่ย ไปนคีซ ใช้คเมถอด filter() กรองอสำเรยล โดยใชค้เงองื่ นไขกสำรกรอง
let fruits = [ 'apple', 'banana', 'grapes', 'mango', 'orange' ]
// arr = อาเรย์ต
// query = String ทิจีข่ร ะคนช้ หา
function filterItems(arr, query) {
return arr.filter(function(el) {
return el.toLowerCase().indexOf(query.toLowerCase()) !== -1
// เชน่ค "apple".toLowerCase().indexOf("ap".toLowerCase()) !== -1
})
}
Logger.log(filterItems(fruits, 'ap')) // ['apple', 'grapes']
Logger.log(filterItems(fruits, 'an')) // ['banana', 'mango', 'orange']
บททรีิ่ข 13 : อาเรย์เต มถอด ตระกบลู วนลูปบ 153
13.3. sort()
JavaScript Arrays Sort Method Tutorial - Google Sheets Apps Scripts - Array Methods Part 9
https://youtu.be/hPCIOohF0Fg?list=PLv9Pf9aNgemvD9NFa86_udt-NWh37efmD
sort() เป็นป Method ของอสำเรยทล ใืคงี่ ช้เค รคยี งสมสำชกิพ ในอสำเรยล
13.3.ก.) ขค้อมลย เป็นป ตตัวเลขทตั้นงี หมด
ตวร อย่สม ำงทท่ี 1 - เรียค งโดยไม่ใยู สูย่ Argrument ใดๆ ลงไปใน sort()
function sortArr() {
var arr1 = [4,2,5,6,5,2];
var arr2 = [4,2,5,6,5,2,44,9,56];
Logger.log(arr1.sort()) ; // พมร พ์ต : [2.0, 2.0, 4.0, 5.0, 5.0, 6.0]
Logger.log(arr2.sort()) ; // พมร พ์ต : [2.0, 2.0, 4.0, 44.0, 5.0, 5.0, 56.0, 6.0, 9.0]
} // End function
ตวร อย่มสำงทที่ 2 - เรียค งตสำมคยสู่ ำของตลัวเลข ต้คองใสู่ย Argrument เปปน็ ฟฝังกชล ่นงัลื กสำรกรองลงไปใน sort()
function sortArr() {
var arr2 = [4,2,5,6,5,2,44,9,56];
var dataSort = arr2.sort(function(a,b){
// จบลั มาทลีข ะคแบู่ค ลวช้ เปรยีข บเทยีข บไปจบเรขียงจบ a = 4
// b = 2
if(a > b) { return 1 ; } // -1 หากตอ้ช งการเรขียงมากไปนอช้ ย
else if (a < b) { return -1 ; } // 1 หากตช้องการเรยขี งมากไปนอช้ ย
return 0 ;
}); // End sort
Logger.log(dataSort); // พรมพ์ต : [2.0, 2.0, 4.0, 5.0, 5.0, 6.0, 9.0, 44.0, 56.0]
} // End function
หสำกตค้องกสำรเรีคยงจสำกมสำกไปน้คอย กก็ใหค้สลลับตัลว Return จสำก 1 เปป็น -1 อยยู่สำงไรกก็ดคี ไมยู่จสส ำเป็ปนตค้องเป็ปน 1
หรงอ -1 เป็ปน 11 กัลบ -15 กไ็ก ดค้
154 หลกัล การเขียข นโปรแกรม Google Apps Script โดย วสัลนตต์ คณคุ ดรลกเศวต ([email protected])
ตรวอยสม่ ำงทท่ี 3 - ทสสำให้คสซนัล กว่ยูสำตลัวอยยูส่ ำงทงีื่ค 2 โดยไมต่ยู ้อค งใชค้ if
function sortArr() {
var arr2 = [4,2,5,6,5,2,44,9,56];
var dataSort = arr2.sort(function(a,b){
return a - b ; // เชนค่ 4-2 = 2 เปปน็ + ฉะนัล้ีนน a(4) ควรอยูค่หบ ลลงั b(2)
}); // เชค่น 2-5 = -3 เปป็น - ฉะนีั้ลนน b(5) ควรอยหู่คบ ลัลง a(2) …. ทกาไปเร่ิรมือยๆ
Logger.log(dataSort); // พมร พต์ : [2.0, 2.0, 4.0, 5.0, 5.0, 6.0, 9.0, 44.0, 56.0]
} // End function
13.3.ข.) ขอ้ค มลย เปป็นขอ้ค ความทัตีน้งหมด
ตรวอยส่ม ำงทที่ 1 - เรียค งโดยไมย่ใู สู่ยพสำรสำมิพเตอรใล ดๆ ลงไปใน sort()
function sortArr() {
var arr3 = ["t","n","a","b","a","r","b","apple"];
// ข้ชอมบลู “5” ชนดร เป็ปนขอช้ ความ
var arr4 = ["t","n","5","A","b","a","r","B","Apple","apple","APple"] ;
Logger.log(arr3.sort()); // พมร พต์ : [a, a, apple, b, b, n, r, t]
Logger.log(arr4.sort()); // พมร พต์ : [5, A, APple, Apple, B, a, apple, b, n, r, t]
} // End function
ตวร อยสม่ ำงที่ท 2 - เรียค งตสำมตวัล อลักษร ใชว้ค ิธพ คีเดคยี วกัลบขคอ้ มลย ตวัล เลข
function sortArr() {
var arr4 = ["t","n","5","A","b","a","r","B","Apple","apple","APple"]; // 5 ชนรดเป็นป ขช้อความ
var dataSort = arr4.sort(function(a,b){
if(a > b) { return 1 ; } // -1 หากตชอ้ งการเรียข งมากไปนอ้ช ย
else if (a < b) { return -1 ; } // 1 หากตอ้ช งการเรขยี งมากไปนอช้ ย
return 0 ;
}); // End sort
Logger.log(dataSort); // พมร พต์ : [5, A, APple, Apple, B, a, apple, b, n, r, t]
} // End function
บททิรี่ข 13 : อาเรยตเ์ มถอด ตระกูลบ วนลบปู 155
ตวร อยม่สำงท่ที 3 - เรียค งตสำมตัวล อกัล ษร –โดยไมสยู่ นใจ Case
ตัลวอยยู่สำงทืคีง่ 2 เรคียงโดยเอสำ Case ของตัลวอัลกษรมสำใช้คในกสำรเรคียงด้ควย หสำกตค้องกสำรเรคียงโดยไมู่ยสนใจ Case
ใหค้ ใชฟ้ค งัฝ กชล ลนื่งั toLowerCase() แปลงข้คอควสำมให้คเป็ปนพมพิ พลเล็กก ทัลซงหมดกยูอ่ นเรคยี ง
function sortArr() {
var arr4 = ["t","n","5","A","b","a","r","B","Apple","apple","APple"]; // 5 ชนรดเป็ปนขชอ้ ความ
var dataSort = arr4.sort(function(a,b){
a = a.toLowerCase();
b = b.toLowerCase();
if(a > b) { return 1 ; } // -1 หากตชอ้ งการเรยขี งมากไปน้อช ย
else if (a < b) { return -1 ; } // 1 หากตอช้ งการเรขียงมากไปน้อช ย
return 0 ;
}); // End sort
Logger.log(dataSort); // พมร พ์ต : [5, A, a, Apple, apple, APple, b, B, n, r, t]
} // End function
ตวร อยสม่ ำงทที่ 4 - กรณขีค อค้ มลย มตีค ลัวเลขผสมอยยใู่ นขค้อควสำม
กรณขคี ้คอมยลมคีตวลั เลขผสมอยใยู่ นขค้อควสำม ให้คแปลงเปป็นชนพิดขค้อควสำมกู่ยอน โดยใชคฟ้ ฝังกลชงัลื่น toString() ไมูเ่ย ช่ยูน
นนลัซ จะ Error แมเค้ ปปน็ ตวัล เลขก็จก ะถยกเรียค งแบบขอ้ค ควสำม
function sortArr() {
var arr6 = ["t","n","5","A",4,"b",44,"a","r","B","Apple","apple","APple"]; // 5 ชนดร เปน็ป ขอ้ช ความ
var dataSort = arr6.sort(function(a,b){
a = a.toString().toLowerCase();
b = b.toString().toLowerCase();
if(a > b) { return 1 ; } // -1 หากต้ชองการเรีขยงมากไปนอ้ช ย
else if (a < b) { return -1 ; } // 1 หากตอ้ช งการเรขียงมากไปนชอ้ ย
return 0 ;
}); // End sort
Logger.log(dataSort); // พมร พ์ต : [4.0, 44.0, 5, A, a, Apple, apple, APple, b, B, n, r, t]
} // End function
156 หลลกั การเขขยี นโปรแกรม Google Apps Script โดย วสลนั ต์ต คณคุ ดรลกเศวต ([email protected])
13.3.ค.) ขอค้ มลย ผสม
ตรวอยสม่ ำงที่ท 1 - เรคยี งโดยไมยูใ่ สพูย่ สำรสำมเพิ ตอรใล ดๆ ลงไปใน sort() - สงลั เกตวถ สู่ย ำข้คอมยลในอสำเรยกล กจ็ ะสะเปะสะ
ปะหนอยู่ ย
function sortArr() {
var arr5 = var arr5 = ["t","","n","5","A",undefined,"",null
, "a",undefined,"r",1,66,9,"B","Apple","apple","APple"] ;
Logger.log(arr5.sort());
// พรมพต์ : [, , 1.0, 5, 66.0, 9.0, A, APple, Apple, B, a, apple, n, null, r, t, null, null]
} // End function
ตวร อยสม่ ำงทท่ี 2 - แยกขอ้ค มยลเปนป็ 2 กอค้ น กค้อนขอค้ ควสำม และ ตวลั เลข ดว้ค ยอสำเรยวล ูยส่ ำงๆ 2 ตวัล จสำกนันซล จงถึ เรคียง
แลคว้ เอสำมสำรวมกลันดวค้ ย concat
function sortArr() {
var arr7 = ["t","","n","5","A",undefined,"",null,
"a",undefined,"r",1,66,9,"B","Apple","apple","APple"] ;
var numberArr =[];
var textArr =[];
var otherArr =[];
arr7.map(function(item){
if(typeof item === "number"){
numberArr.push(item) ;
} else if (typeof item === "string"){
textArr.push(item.toString());
} else {
otherArr.push(item);
}; // End if
}); // End map
Logger.log(numberArr);
// พิมพ พล : [7.0, 66.0, 19.0]
Logger.log(textArr);
// พมพิ พล : [t, , n, 5, A, , a, r, B, Apple, apple, APple]
Logger.log(otherArr);
// พมพิ พล : [null, null, null]
// รวมอาเรยทต์ ขร่เีิ รยขี งแลวช้ เขชา้ ดวช้ ยกันล
var comArr = numberArr.sort(sortNumber).concat(textArr.sort(sortAlpha));
Logger.log(comArr);
// พิพมพล : [7.0, 19.0, 66.0, , , 5, A, APple, Apple, B, a, apple, n, r, t]
} // End function
บททขีริ่ 13 : อาเรยต์เมถอด ตระกูลบ วนลบูป 157
function sortAlpha(a,b){
if(a > b) { return 1 ; }
else if (a < b) { return -1 ; }
return 0 ;
} // End function
function sortNumber(a,b) {
return a-b ;
} // End function
13.3.ง.) เรทยงขอ้ค มลย ในอาเรยล 2 มพิตพิ
https://stackoverflow.com/questions/16096872/how-to-sort-2-dimensional-array-by-column-value
ตวัล อยสู่ย ำงอยู่สย ำงนีซค เปป็นกสำรเรีคยงอสำเรยลแบบ 2 มติพ พิ ซึงื่งถ มิตพ พขิ องอสำเรยมล คลี ลักษณะเดีคยวกลนั กับล กสำรจับล ขค้อมลย มสำ
จสำกเรน้ค จใล น Google Sheets
function sortArr2Dim(){
var arr2dim = [
[ 12 , 'AAA' ] ,
[ 58 , 'BBB' ] ,
[ 28 , 'CCC' ] ,
[ 18 , 'DDD' ]
];
Logger.log(sortBy1stColumn(arr2dim)) ;
/* [
[12.0, AAA ] ,
[18.0, DDD ] ,
[28.0, CCC ] ,
[58.0, BBB ]
] */
}
function sortBy1stColumn(arr2dim){
arr2dim.sort(function(a, b) {
if (a[0] === b[0])
{
return 0 ;
}
else
{
return (a[0] < b[0]) ? -1 : 1 ;
}) ;
return arr2dim ;
}
158 หลลักการเขขียนโปรแกรม Google Apps Script โดย วสลันต์ต คณคุ ดรลกเศวต ([email protected])
13.3.จ.) เรยท งโดยใช้ค 2 คยท ล (หรอร มากกวยู่า) – ใชคอ้ าเรยอล ย่ยาู งเดยท ว
ปรับล แต่คงจาก
https://gomakethings.com/sorting-an-array-by-multiple-criteria-with-vanilla-javascript/
ตวลั อยู่สย ำง
function sortBy2Keys(){
// อาเรยต์ 1 มรตร แตส่ค มาชกร แตลค่ ะตวลั เปป็น Objects
var votes = [
[ 'Apple' , 1 , 100 ] ,
[ 'B' , 2 , 109 ] ,
[ 'Carrot' , 3 , 102 ] ,
[ 'Banana', 2 , 103 ] ,
[ 'B' , 2 , 99 ] ,
[ 'A' , 2 , 105 ] ,
[ 'B' , 2 , 777 ]
];
votes.sort(function (vote1, vote2) {
// คยขี ต์ทีขร่ิ 1 เรียข งตาม คอลัมล นต์ท่ิรีข 2 - กค่อนไปหลงัล
if (vote1[1] > vote2[1]) return -1 ;
if (vote1[1] < vote2[1]) return 1 ;
// คยีข ทต์ รีขิ่ 2 เรขียงตาม คอลมลั นทต์ ี่ริข 1 - มากไปนอ้ช ย
if (vote1[0].toString() > vote2[0].toString()) return 1 ;
if (vote1[0].toString() < vote2[0].toString()) return -1 ;
// คยีข ตท์ ข่ิรี 3 เรียข งตาม คอลลัมนตท์ ริ่ขี 3 - นอ้ช ยไปมาก
if (vote1[2] > vote2[2]) return 1 ;
if (vote1[2] < vote2[2]) return -1 ;
}) ; // Close - sort
Logger.log(votes) ;
/* [ [ Carrot, 3.0, 102.0 ] ,
[ A, 2.0, 105.0 ] ,
[ B, 2.0, 99.0 ] ,
[ B, 2.0, 109.0 ] ,
[ B, 2.0, 777.0 ] ,
[ Banana, 2.0, 103.0 ] ,
[ Apple , 1.0, 100.0 ] ] */
}
บททีข่ริ 13 : อาเรยเ์ต มถอด ตระกบลู วนลูบป 159
13.3.ฉ.) เรยท งโดยใช้ค 2 คยท ล (หรรอมากกวายู่ ) – ใช้ค Object ชยูว่ ย
ปรบัล แตงค่ จาก
https://gomakethings.com/sorting-an-array-by-multiple-criteria-with-vanilla-javascript/
ตลัวอยสู่ย ำงต่ยูอไปนีคซ เรคียงตสำมตลัวเลขกยู่อน(Vote) จสำกนลัซนจถึงเรีคยงตสำมชง่ือ(Title) และ ตสำมคิพว(que) สลังเกตถวู่ยสำ
ขค้อมลย เปน็ป อสำเรยล 1 มพติ ิพ แตส่ยู มสำชิกพ ขค้สำงในเป็ปน Objects ทื่มีคง ไีค ด้หค ลสำย Properties
function sortBy2Keys(){
// อาเรย์ต 1 มรตร แต่สค มาชกร แต่คละตัวล เปนป็ Objects que : 100 } ,
var votes = [ que : 109 } ,
que : 102 } ,
{ title: 'Apple' , vote: 1 , que : 103 } ,
{ title: 'B' , vote: 2 , que : 99 } ,
{ title: 'Carrot' , vote: 3 , que : 105 } ,
{ title: 'Banana', vote: 2 , que : 777 }
{ title: 'B' , vote: 2 ,
{ title: 'A' , vote: 2 ,
{ title: 'B' , vote: 2 ,
];
votes.sort(function (vote1, vote2) {
// เรยท งตาม Votes
// ถา้ช คา่ค ของตวัล แรก มากกว่าค ยาช้ ยไปด้ชานลา่ค ง
// ถ้ชาคา่ค ของตัวล แรก นอช้ ยกว่าค ยาช้ ยไปดชา้ นบน
if (vote1.vote > vote2.vote) return -1 ;
if (vote1.vote < vote2.vote) return 1 ;
// ถ้ชาคาค่ ของ Votes ซนี้กากนลั เรยท งตามตวัต อกตั ษระของ Title ตย่อู
// ถ้าช ลกาดบลั ของตวัล แรก มากอ่ค น ยชา้ ยไปดา้ช นบน - อยา่ค งอืริ่มน ยาช้ ยไปดา้ช นล่คาง
if (vote1.title.toString() > vote2.title.toString()) return 1 ;
if (vote1.title.toString() < vote2.title.toString()) return -1 ;
// เรขยี งโดยใชคช้ ยีข ตท์ ิรีข่ 3 - จากน้ชอยไปมาก
if (vote1.que > vote2.que) return 1 ;
if (vote1.que < vote2.que) return -1 ;
}) ; // Close - sort
Logger.log(votes) ; // ทดสอบ Log หลลังจากเรีขยงแลวช้
// กรอกข้ชอมูลบ ลง Google Sheets
var sheet3 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet3') ;
// จบัล ใส่คอาเรย์ต 2 มตร ร - เตรียข มสกาหรบัล กรอกลง Googel Sheets
var arr2dim = [] ;
votes.forEach(function(obj){
arr2dim.push([ obj.title , obj.vote , obj.que] ) ;
}) ; // Logger.log(d) ;
sheet3.getRange(1,1,arr2dim.length,arr2dim[0].length).setValues(arr2dim) ;
}
160 หลลักการเขยีข นโปรแกรม Google Apps Script โดย วสลนั ตต์ คณุค ดรลกเศวต ([email protected])
ผล
13.4. every() และ some()
JavaScript Array every() Method
https://www.w3schools.com/jsref/jsref_every.asp
JavaScript Every & Some Array Methods Tutorial - Google Sheets Apps Scripts - Array Methods Part 8
https://youtu.be/gaC290XzPX4?list=PLv9Pf9aNgemvD9NFa86_udt-NWh37efmD
every() ใชตค้ รวจสอบสมสำชพกิ ทถกตวลั ในอสำเรยวล สู่ย ำ เปป็นไปตสำมเงงอ่ื นไขหรงอเปลูส่ย ำ เชูย่น มสำกกวสยู่ ำ 0 ทกถ ตัลวหรงอ
ไมูย่ สู่วย น some() กค็ก ล้คสำยกันล ถค้สำมคเี พคียงบสำงตวัล จริงพ ตสำมเงือ่ง นไข ก็กจะคงนคสยู่ ำ true กลลับมสำ
รยปแบบกสำรใช้งค สำน
array.every(function(currentValue, index, arr), thisValue)
พสำรสำมพิเตอรล
Parameter Description
(จกาเปน็ป ) ฟังฟ กช็ก ่รนิัล ทิรข่จี ะรันล สกาหรบัล แตคล่ ะอเร ลก็มเมช้นตใต์ นอาเรย์ต
อาร์ตกวร เม้ชนต์ขต องฟงัฟ ก์ตชล่ินรั
function(currentValue, Argument Description
index, arr)
currentValue (จกาเปน็ป ) คาค่ ของอรเลม็ก เม้นช ตปต์ ฟัจจุคบนลั
thisValue
index (ไมจค่ กาเปน็ป ) ดรรชนีอข าเรยข์ต องอเร ลก็มเมนช้ ตต์ปจฟั จบุค ันล
arr (ไมคจ่ กาเปปน็ ) วตลั ถคุอาเรยต์ของทอ่ีรขิ เร ลกม็ เมน้ช ตต์ปัฟจจบุค ัลน
(ไมจค่ กาเป็ปน) คคา่ ทิข่จรี ะถบกู ส่งค ใหก้ช ัลบฟงัฟ กตช์ ลริ่นั เพิอมื่ร ถกบู ใช้เช ปปน็ ค่คา "this"
ถ้ชาเวน้ช ไวช้ คา่ค undefined จะถูบกสง่ค ผ่าค น
กสำรคงนคยูส่ ำ – Boolean สยูง่ คงนคู่ยสำ true หสำกอิเพ ลกม็ เมค้นตทล ัซลงหมดในอสำรลเรยล ผสูย่ ำนเงอืง่ นไข อยยูส่ ำงองค่ื งนคสยู่ ำ false
บททีร่ขิ 13 : อาเรย์เต มถอด ตระกูลบ วนลบูป 161
13.4.ก.) ตวัต อยยาู่ งทที่ 1 : อาเรยล 1 มพติ พิ
function every_some() {
var arr1 = [1,2,3,4,5,7] ;
var resultsEvery = arr1.every(function(num){
return num > 3 ; // [ 1 , 2 , 3 , 4 , 5 , 7]
// T T F F F F =>
// มท false 1 ตวัต คนร คู่ยา false
});
Logger.log(resultsEvery); // พมร พ์ต : false
var resultsSome = arr1.some(function(num){
return num > 3 ; // [ 1 , 2 , 3 , 4 , 5 , 7]
// T T F F F F => มท true 1 ตัวต คนร คยู่า true
});
Logger.log(resultsSome); // พมร พ์ต : true
} // End function
13.4.ข.) ตตวั อยยูา่ งที่ท 2 : อาเรยล 2 มิพติพ
function every_some() {
var arr2 = [ ["a" , 6] ,
["b" , 9] ,
["c" , 6] ] ;
var resultsEvery = arr2.every(function(row){
return row[0] === "b" ; // [ a , b , c ]
// F T F => มท false 1 ตัตวคนร คยาู่ false
});
Logger.log(resultsEvery); // พมร พ์ต : false
var resultsSome = arr2.some(function(num){
return num[1] > 7 ; // [ 6 , 9 , 6]
// T F T - มท true 1 ตวัต คนร คยูา่ true
});
Logger.log(resultsSome) ; // พรมพ์ต : true
} // End function
162 หลักล การเขยขี นโปรแกรม Google Apps Script โดย วสัลนต์ต คณุค ดรลกเศวต ([email protected])
13.4.ค.) ตัวต อย่าูย งทีท่ 3 : ตวตั แปรวัตต ถุจ
https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_every3
ตรวจสอบวสู่ย ำคสส ำตอบเหมอง นกนลั ทัซลงหมดหรอง ไมยู่ Yes หรอง No ทซงัล หมด ตวลั ใดตวัล หน่ถืงึง จะคงนคสูย่ ำ true
function test(){
var survey = [
{ name: "Steve", answer: "Yes" } ,
{ name: "Jessica", answer: "Yes" } ,
{ name: "Peter", answer: "Yes" } ,
{ name: "Elaine", answer: "No" }
];
Logger.log(survey.every(isSameAnswer));
}
function isSameAnswer(el, index, arr) {
// arr กค็ก อืม อาเรยตท์ ีลันง้ ยวง
if (index === 0){
return true ;
} else {
return (el.answer === arr[index - 1].answer);
}
}
กสำรทสสำงสำน เปรียค บเทยีค บคสสำตอบใน Index ปจัฝ จถบลัน กบัล Index กอูย่ นหนคส้ ำ
index 0 el.answer === arr[index-1].answer ==> true - ตลนง้ัี แต่เค ร่มริ ต้ชน
index 1 – -- ==> true
index 2 – Yes === Yes ==> true
index 3 – Yes === Yes ==> false
No === Yes
บททิขรี่ 13 : อาเรย์เต มถอด ตระกลูบ วนลบปู 163
13.5. forEach()
JavaScript Array forEach() Method
https://www.w3schools.com/jsref/jsref_foreach.asp
forEach ใชว้ค นลยปสยูง่ สมสำชิพกในอสำเรยลทลีค ะตวลั ไปประมวลผลในฟฝงั กชล ่ลงืัน
13.5.ก.) รปย แบบการใช้งค าน
รปย แบบกสำรใช้คงสำน
array.forEach(function(currentValue, index, arr), thisValue )
พสำรสำมพเิ ตอรล ( ไม่มก ทเวลาแปลจาต้ …. ขออภลัยดต้วย ดผตวลั อยา่ก งจะเขต้าใจไดต้ไมก่อยาก)
Parameter Description
(ต้อช งการ) A function to be run for each element in the array.
Function arguments : (ฟังฟ ก์ชต ร่ิลนั ทิีข่จร ะใช้รช ลันสมาชกร แตค่ละตลัวในอาเรย์ต)
function(currentValue, index, Argument Description
arr)
currentValue (ตช้องการ) คคา่ ของอเร ลก็มเมชน้ ตต์ตวลั ปฟัจจคุบันล
index (ไมจ่ค กาเป็ปน) ดรรชนีขอาเรย์ตของอรเลก็มเมน้ช ตป์ต ัจฟ จบุค ลัน
arr (ไมคจ่ กาเปป็น) กอช้ นอาเรยท์ต ีขรสิ่ มาชรกตวลั ปจัฟ จคบุ นัล อยคูบ่
(อาเรยต์ต ลัวทีข่ริกกาลงลั วนลปูบ อยบ่นคู นีแข้ หละ)
thisValue (เวชน้ ไวไช้ ด)ช้ A value to be passed to the function to be used as its
"this" value. If this parameter is empty, the value "undefined" will
be passed as its "this" value
13.5.ข.) ตตวั อยาู่ย งท่ที 1 : การใช้งค านแบบ 1 Argrument
เอสำตัลวเลขในอสำเรยลมสำบวกกนลั
function forEach_1() {
var sum = 0;
var numbers = [65, 44, 12, 4]; // ตวัล แปรอาเรยตท์ ขริีร่ ะบสุค มาชกร
numbers.forEach(myFunction); // จบ forEach
function myFunction(item) { // 1 Argrument
sum += item; // เอาคคา่ ของสมาชกร มาบวกกันล ไปเรอิม่รื ยๆ แล้ชวเกบก็ ไว้ชใน sum
}
Logger.log(sum); // พพิมพล : 125.0
}
164 หลัลกการเขยขี นโปรแกรม Google Apps Script โดย วสนัล ตต์ คณคุ ดรลกเศวต ([email protected])
13.5.ค.) ตตัวอย่ายู งทีท่ 2 : การใชคง้ านแบบ 2 Argruments
เอสำขอ้ค ควสำมในอสำเรยมล สำตยู่อกนลั
function forEach_2() {
var fruits = ["apple", "orange", "cherry"]; // item
// 0 1 2 // index
var text = "" ;
fruits.forEach(function(item, index) { // 2 Argruments
text += index + ":" + item + "<br>" ;
}) ; // จบ forEach
Logger.log(text) ; // พิมพ พล 0:apple<br>1:orange<br>2:cherry<br>
}
13.5.ง.) ตัตวอย่ายู งทท่ี 3 : : การใชคง้ านแบบ 3 Argruments
เอสำตวลั เลขในอสำเรยลทงัลซ หมดมสำคณถ ดวค้ ยสิพบ
function forEach_3() {
var numbers = [65, 44, 12, 4];
numbers.forEach(function(item, index, arr) { // 3 Argruments
// เอาสมาชรกในอาเรยต์ numbers มาประมวลผล
// แลวช้ เกบ็ก ไวใ้ช นอาเรย์ต arr (ตลัวเดรม) เปน็ป การ Assign คาค่ ใหม่ลค งไป
arr[index] = item * 10;
} // จบ forEach
Logger.log(numbers);
// พพิมพล : [650.0, 440.0, 120.0, 40.0]
// เอาทุคกคา่ค อาเรย์ต numbers มาคณูบ กบลั 10
}
บททข่ิรี 13 : อาเรยต์เมถอด ตระกบูลวนลูปบ 165
13.5.จ.) ตตวั อยย่าู งทที่ 4 : ตัตวอย่าูย งอน่ทีร ๆ
ตวลั อย่ยสู ำงนคีซ แปลงสมสำชพิกในอสำเรยทล ืีค่ง อณถ หภยมิพเปป็นองศสำ C ไปเปป็นเปป็น F แลค้วเกบ็ก ไวใ้ค นอสำเรยลวูย่สำงๆท่คีงืเตรีคยม
ไวค้
function forEachLoopTemp() {
var celciusArray = [ 0 , 13 , 19 , 11 , 24 , 29 , 34 , 17 , 4 ] ;
var farenheitArray = [] ; // เตรขียมอาเรยตว์ ่คางๆไว้ชเกบก็ ผลลพลั ธ์ต
celciusArray.forEach(function(celciusTemp) {
// เรีขยกใชช้ฟฟงั กช์ต ลนิ่ัร convertCtoF(t)
// โดยส่คงสมาชกร ไปประมวลผลทลขี ะตลวั
var farenheitTemp = convertCtoF(celciusTemp) ;
// เกบ็ก ผลลัลพยต์ไว้ใช นอาเรย์ตวาค่ งๆทเรีขิ่ ตรขยี มไวช้
farenheitArray.push(farenheitTemp) ;
});
Logger.log('Celcius Array:') ; // ดผูบ ลทิรีข่ Logs –------------- > [ 01 ]
Logger.log(celciusArray) ; // ดผูบ ลทีริ่ข Logs –------------- > [ 02 ]
Logger.log('Farenheit Array') ; // ดผบู ลทขีร่ิ Logs –------------- > [ 03 ]
Logger.log(farenheitArray) ; // ดผบู ลท่ิขีร Logs –------------- > [ 04 ]
}
function convertCtoF(t) {
return (t * 9/5) + 32 ;
}
ผล
Logs
[01] Celcius Array:
[02] [0.0, 13.0, 19.0, 11.0, 24.0, 29.0, 34.0, 17.0, 4.0]
[03] Farenheit Array
[04] [32.0, 55.4, 66.2, 51.8, 75.2, 84.2, 93.2, 62.6, 39.2]
13.6. reduce()
JavaScript Array reduce() Method
https://www.w3schools.com/jsref/jsref_reduce.asp
Javascript reduce example
https://appdividend.com/2018/10/16/javascript-reduce-example-tutorial/
reduce เปป็นเมถอด ทใ่ีงคื ชว้ค นลปย เพองื่ นสส ำสมสำชพกิ ในอสำเรยลมสำประมวลผลดว้ค ยฟฝงั กชล ่ลืนงั เพงื่อลดสมสำชิพกในอสำ
เรยล โดยจะคงนผลลลพั ธสล ถดทส้ค ำยมสำตวัล เดยคี ว
166 หลัลกการเขีขยนโปรแกรม Google Apps Script โดย วสนัล ต์ต คณุค ดรลกเศวต ([email protected])
13.6.ก.) รยปแบบการใชงค้ าน
รปย แบบกสำรใชคง้ สำน
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
พสำรสำมิพเตอรล
Parameter Description
(จาก เป็ปน) ฟฟังกตช์ นัรลิ่ ทใ่ิรีข ชชร้ นัล สมาชรกในอาเรยต์แตลค่ ะตวัล
Argument Description
function(total,currentValue, total (จาก เปปน็ ) คาค่ initialValue(หากมขกี ารกาก หนด) หรมือ
เปน็ป คคา่ ทิ่ครีข ืนม กลบลั มากอค่ นหน้าช โดยฟฟงั ก์ชต นัิลร่
index,arr)
currentValue (จาก เปนป็ ) คาค่ ของสมาชกร อาเรยต์ตวลั ปัจฟ จุบค นัล
currentIndex (ไม่คบลังคบัล ) ดรรนขีลกาดบลั ของสมาชกร อาเรยตต์ ัลวปจัฟ จคุบันล
arr (ไม่บค งัล คบลั l) อาเรยท์ต ิ่ขีใร ชเลั กกบ็ ผลลพลั ธ์ต
initialValue (ไม่บค งัล คบัล ) คา่ค ทรีข่สิ ง่ค ให้ชกบลั ฟงฟั กชต์ รันล่ิ ทใรี่ขิ ชเ้ช ป็ปนค่คาเรริ่มตช้น
13.6.ข.) ตวัต อยายู่ งท่ีท 1 : รวมคยาู่ ของสมาชิพกในอาเรยล
ตวัล อยูยส่ ำงนคซี นสส ำคยู่สำของสมสำชพิกในอสำเรยลมสำรวมกัลน
function test_sum_array(){
var data = [5, 10, 15, 20, 25] ; // Sum = 75
var res = data.reduce(function(total,currentValue) {
return total + currentValue ;
}) ;
Logger.log(res) ; // พมร พ์ต : 75
}
ดยกสำรวนลยปของโค้ดค ขส้ค ำงต้คน
ลยปครัตงนี้ ทท่ี total currentValue return
1 0 5 5
2 5 10 15
3 15 15 30
4 30 20 50
5 50 25 75
บททีริข่ 13 : อาเรย์เต มถอด ตระกลูบ วนลปบู 167
13.6.ค.) ตตวั อยยาู่ งที่ท 2 : ลดมิตพ ขิพ องอาเรยล
ตวัล อยสู่ย ำงนคีซ ลดมติพ พขิ องอสำเรยจล สำก 2 เหลงอ 1 สัลงเกตวถ สูย่ ำมกคี สำรใชพ้ค สำรสำมิพเตอรล initialValue ดวค้ ยกค็ก งอ []
function test_concat_array(){
var data = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] ;
var flatValues = data.reduce(function(total, value) {
return total.concat(value) ;
}, []) ; // ใส่ค initialValue
Logger.log(flatValues) ; // พมร พ์ต [1, 2, 3, 4, 5, 6, 7, 8, 9]
}
ดกย สำรวนลปย ของโคคด้ ขสค้ ำงตนค้
ลยปครงตั้ีน ทที่ total value return total.concat(value)
1 [] - initialValue [1, 2, 3] [1, 2, 3]
2 [4, 5, 6]
3 [1, 2, 3] [7, 8, 9] [1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 6, 7, 8, 9]
13.6.ง.) ตวตั อยูยา่ งทีท่ 3 : หาคยาู่ เฉลยที่ ของสมาชกิพ ในอาเรยล
ตวลั อยสยู่ ำงนคซี หสำค่สูย ำเฉลียค่ืง ของสมสำชกพิ ในอสำเรยล ขค้อสลงั เกตถของโคคด้ ทีสค่งื สสำคญัล กค็ก งอ พสำรสำมิเพ ตอรล array
(พสำรสำมิพเตอรลตวัล ทงีค่ื 4) เปป็นอสำเรยทล งืคี่ใชเ้ค กก็บผลลพลั ธลจสำกกสำรประมวลผลของฟัฝงกชล ัืน่งล มมีค พิตพิของอสำเรยเล ทสู่ย ำกับล อสำเรยทล ืงีค่
นสส ำมสำประมวลผล
function test_avg_array(){
var pounds = [ 11, 21, 16 ] ;
var avg = pounds.reduce(function(total, amount, index, array){
total += amount ;
if (index === array.length - 1) {
return total / array.length ;
} else {
return total ;
}
});
Logger.log(avg) ; // 16
}
ดกย สำรวนลยปของโคด้ค ข้สค ำงตค้น
ลปย total+= amount amount index array.length-1 return
1 0+11 11 0 3-1 11
2 11+21 21 1 3-1 33
3 33+16 16 2 3-1 16 (48/3)
168 หลลักการเขีขยนโปรแกรม Google Apps Script โดย วสนลั ตต์ คณคุ ดลร กเศวต ([email protected])
13.6.จ.) ตตัวอยายู่ งทีท่ 4 : หาตวตั ซน้สีา และจาส นวนการซนีาส้
ตวัล อย่ยูสำงนีคซ หสำคสู่ย ำเฉลีค่ยืง ของสมสำชพกิ ในอสำเรยล ข้อค สังล เกตขถ องโค้ดค ทืี่สคง สส ำคญัล กค็ก งอ พสำรสำมิพเตอรล array
(พสำรสำมเิพ ตอรลตลัวทืี่คง 4) เปน็ป อสำเรยลทงีใ่ืค ชเ้ค ก็บก ผลลัพล ธลจสำกกสำรประมวลผลของฟงฝั กชล ืนั่งล มีมค ติพ พิของอสำเรยเล ท่สยู ำกลับ อสำเรยทล คีงื่
นสสำมสำประมวลผล
function test_findDup_array(){
var pounds = [11, 21, 16, 19, 46, 29, 46, 19, 21] ;
var count = pounds.reduce(function(data, pound){
data[pound] = (data[pound] || 0) + 1 ;
return data ;
} , {} ) ;
Logger.log(count) ; // {11=1.0, 46=2.0, 16=1.0, 29=1.0, 19=2.0, 21=2.0}
}
ดยกสำรวนลปย ของโค้ดค ขค้สำงต้คน
ลยป 1 data = {}
pound = 11
return = data[11]=(data[11] || 0) +1 → data = {11:1}
ลปย 2 data = {11:1}
pound = 21
return = data[21]=(data[21] || 0) +1 → data = {11:1, 21:1}
ลยป 3 data = {11:1, 21:1}
pound = 16
return = data[16]=(data[16] || 0) +1 → data = {11:1, 21:1, 16:1}
ลปย 4 data = {11:1, 21:1, 16:1}
pound = 19
return = data[19]=(data[19] || 0) +1 → data = {11:1, 21:1, 16:1, 19:1}
ลยป 5 data = {11:1, 21:1, 16:1, 19:1}
pound = 46
return = data[46]=(data[46] || 0) +1 → data = {11:1, 21:1, 16:1, 19:1, 46:1}
ลปย 6 data = {11:1, 21:1, 16:1, 19:1, 46:1}
pound = 29
return = data[29]=(data[29] || 0) +1 → data = {11:1, 21:1, 16:1, 19:1, 46:1, 29:1}
ลยป 7 data = {11:1, 21:1, 16:1, 19:1, 46:1, 29:1}
pound = 46
return = data[46]=(data[46] || 0) +1 → data = {11:1, 21:1, 16:1, 19:1, 46:2, 29:1}
ลปย 8 data = {11:1, 21:1, 16:1, 19:1, 46:2, 29:1}
pound = 19
return = data[46]=(data[46] || 0) +1 → data = {11:1, 21:1, 16:1, 19:2, 46:2, 29:1}
ลปย 9 data = {11:1, 21:1, 16:1, 19:2, 46:2, 29:1}
pound = 21
return = data[21]=(data[21] || 0) +1 → data = {11:1, 21:2, 16:1, 19:2, 46:2, 29:1}
return สถดทสค้ ำยคอง {11:1, 21:2, 16:1, 19:2, 46:2, 29:1}
บททิีรข่ 13 : อาเรย์เต มถอด ตระกบูลวนลบูป 169
หมสำยเหตถุ 1 :
ปกติพเรสำจะเห็กน Properties ของตลัวแปร Object เป็ปน Text(ข้คอควสำม) แตยู่โค้คดตู่ยอไปนซีค Properties เปป็น
Number(ตวัล เลข) ซืงึงถ่ สอดคลอค้ งกลับโคค้ดในตวลั อยสูย่ ำงกอูย่ นหนค้สำ
function add_member_to_object(){
var count = { 111:1 , 222:2 } ; // Properties : Value เปนป็ ตลวั เลขท้ังนลี คบูค่
count[333] = 3 ; // เพมร่ิ Property และ Value ตัลวใหม่ค ให้กช บัล ตวลั แปร Object
Logger.log(count) ; // { 111:1 , 222:2 , 333:3}
}
หมสำยเหตถุ 2 :
ถ้คสำค่ยูสำของตัลวแปรยัลงไม่ยูมีค(undefined) หรงอยลังไมยู่ถยกระบถ หสำกนสสำไปคสสำนวณจะเกิพด Error ก็กคงอ NaN
สสำมสำรถปป้องกลันไดค้โดยใชค้ ||(หรอร ) เพืง่อสรสค้ ำงเงอ่งื นไขกสำรคสสำนวณ เชนู่ย a || 5 ถค้สำ a เป็ปน undefind จะนสส ำ 5 มสำใช้ค
คสสำนวณแทน ตวัล อยสยู่ ำงตสำมโคดค้ ตอู่ย ไปนีคซ
function pipe_in_(){
var A = 1, B = 2;
var M = -1, N = 0 ;
var X = null, Y = undefined ;
var Z ;
Logger.log((A || 0) + 1) ; // 1+1 =2
Logger.log((B || 0) + 1) ; // 2+1 =3
Logger.log((M || 0) + 1) ; // 3+1 =0
Logger.log((N || 0) + 1) ; // 0+1 =1
Logger.log((X || 0) + 1) ; // 0(null)+1 =1
Logger.log((Y || 0) + 1) ; // 0(undefined)+1 =1
Logger.log(null + 1) ; // 1
Logger.log(undefined + 1) ; // NaN
Logger.log(Z + 1) ; // NaN
}
170 หลัลกการเขยขี นโปรแกรม Google Apps Script โดย วสลนั ตต์ คณคุ ดลร กเศวต ([email protected])
13.6.ฉ.) ตวัต อยายู่ งทท่ี 5 : หาจสานวนตัตวซสี้าน และจสานวนการซสนีา้ (2)
group array and get count
https://stackoverflow.com/questions/52711740/group-array-and-get-count/52711840
ตวัล อยยสู่ ำงนซทีค สส ำคล้คสำยๆ SUMIF ทคีใง่ื ช้นค ับล จสสำนวนเปป็นกลยถู่มๆได้ค
โค้ดค
const input = [ "foo", "bar", "foo", "bar", "bar", "bar", "zoom" ] ;
const result = input.reduce((total, value) => {
total[value] = (total[value] || 0) + 1 ;
return total ;
}, {}) ;
Logger.log(result) ; // {foo=2.0, zoom=1.0, bar=4.0}
13.6.ช.) ตัตวอย่าูย งทที่ 6 : หาผลรวมเปน็ป กล่ยุจมู ๆ
how to group by and sum array of object? [duplicate]
https://stackoverflow.com/questions/29364262/how-to-group-by-and-sum-array-of-object
var array = [
{ Id: "001", qty: 1 },
{ Id: "002", qty: 2 },
{ Id: "001", qty: 2 },
{ Id: "003", qty: 4 }
];
var result = [] ;
array.reduce(function(res, value) {
if (!res[value.Id]) {
res[value.Id] = { Id: value.Id, qty: 0 } ;
result.push(res[value.Id])
}
res[value.Id].qty += value.qty ;
return res ;
}, {}) ;
Logger.log(result) // ------------------ > ดผูบ ลทริขี่ Logs
ผล
Logs
[
{ "Id": "001", "qty": 3 },
{ "Id": "002", "qty": 2 },
{ "Id": "003", "qty": 4 }
]
บททิรขี่ 13 : อาเรยเ์ต มถอด ตระกบูลวนลบปู 171
172 หลลักการเขขียนโปรแกรม Google Apps Script โดย วสันล ต์ต คณุค ดลร กเศวต ([email protected])
บททข่ีท 14
วตัล ถถ Array
14.1. วลตั ถถุ Array
Array
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array
Array เป็ปน Builtin object หรงอเป็ปน Gobal object ทงถ่ืคี ยกใชใ้ค นกสำรสรส้ค ำงวลัตถอถ สำเรยล
กสำรใชง้ค สำนอสำเรยทล งัล่วื ๆไป ปกตจิพ ะไม่มยู สำถงถึ บทนซีค บทนีซคถอง เปน็ป กสำรใชค้งสำนอสำเรยใล นอีกค แบบหนงงึื่ถ แตม่ยู กลั ใชกัล ลบั
วตัล ถถของ Javascript มสำกกวยู่สำ ฉะนนัลซ ข้สค ำมไปกไ็ก ด้ค
14.2. Array() constructor
Array() constructor
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Array
Array() constructor ใช้สค รค้สำงวตัล ถถอสำเรยล
รปย แบบกสำรใชงค้ สำน
// แบบปกตร
[element0, element1, ..., elementN]
// แบบใช้ช Constructor
new Array(element0, element1[, ...[, elementN]])
// แบบใช้ช Constructor - ระบุคจกานวนสมาชกร
new Array(arrayLength)
เรสำสสำมสำรถสรคส้ ำงอสำเรยลโดยใช้ค Constructor กก็ได้ค แตถู่ย ส้ค ำใชง้ค สำยทลวั่ืง ๆไป กไ็ก มู่นย ิพยพมิ ใชก้ค ันล
ตวลั อยสู่ย ำง
let fruits = new Array(2) ; // 2
console.log(fruits.length) ; // undefined
console.log(fruits[0]) ;
ตวัล อยสู่ย ำง
let fruits = new Array('Apple', 'Banana') ;
console.log(fruits.length) ; // 2
console.log(fruits[0]) ; // Apple
174 หลกัล การเขยีข นโปรแกรม Google Apps Script โดย วสลันตต์ คณุค ดลร กเศวต ([email protected])
14.3. Array prototype constructor
JavaScript Array prototype Constructor
https://www.w3schools.com/jsref/jsref_prototype_array.asp
Prototype constructor ทสสำใหค้เรสำเพิงืมพ่ คณถ สมบตลั พิและเมถอดตวัล ใหมู่ย ใหคก้ ลับวตลั ถถ Array
รปย แบบกสำรใช้คงสำน
Array.prototype.name = value
Array.prototype ไมยู่ไดคห้ มสำยถงถึ อสำเรยเล ดคยี ว แตู่เย หมสำยถงึถ วลตั ถถ Array
Prototype เป็นป Global object constructor ซง่ึงถื ใชค้ไดก้ค บลั วตัล ถถ Javascript ทกถ ตวัล
เม่ืงอสรสค้ ำงคถณสมบลัติพ ทถกอสำเรยจล ะไดร้ค บลั คณถ สมบัลตพิ และคยู่สำของอสำเรยล โดยปรยพิ สำย
เมงื่อสร้คสำงเมถอด ทกถ อสำเรยลจะมคีเมถอดตวลั นีคซ
ตวัล อยสยู่ ำง
สรสค้ ำงเมถอดใหม่ใยู หก้ค ลับวตลั ถถ Array เพองื่ จะเปลคื่ยีง นคู่ยสำของอสำเรยเล ปน็ป ตวัล พมิพ พลใหญ่ยู
Array.prototype.myUcase = function() {
for (i = 0 ; i < this.length ; i++) {
this[i] = this[i].toUpperCase() ;
}
};
กสำรเรีคยกใชคง้ สำน
var fruits = [ "Banana", "Orange", "Apple", "Mango" ] ;
fruits.myUcase() ;
14.4. Array.prototype.slice.call(arguments)
Array.prototype.slice.call(arguments)
https://medium.com/@andrewsburke/array-prototype-slice-call-arguments-a94b04e74a4
ตวัล อยยูส่ ำง
function mysum() {
let argarr = Array.prototype.slice.call(arguments);
return argarr.reduce( (total,item) => total+item ) ;
}
function callpoint(){
const x = mysum(1, 123, 500, 115, 44, 88) ;
Logger.log(x) // 871
}
บททรี่ขิ 14 : วัลตถุค Array 175
176 หลลักการเขขียนโปรแกรม Google Apps Script โดย วสันล ต์ต คณุค ดลร กเศวต ([email protected])
บททีทข่ 15
เทคนนิคอาเรย์ร
15.1. จบัล แถวและคอลมลั น์ยใน Google Sheets มสำใสอม่ สำเรย์ย
ตวัล อยสู่ย ำงนมคีซ คีกสำรเรยคี กใช้คเซอรวล สิพ SpreadsheeetApp ฉะนลซันใหสค้ รสค้ ำงไฟลล Google Sheets จสำกนัซนล พพมิ พล
ขอค้ มลย ตวัล อยสู่ย ำงลงไป ตวัล อยสยู่ ำงตสำมภสำพ
เมืง่อเตรีคยมขค้อมยลใน Google Sheet พร้คอมแล้คว ให้คสรค้สำงโปรเจ็กค Google Apps Script แบบฝฝังไฟลล จสำก
นลซันพิพมพลโคค้ดตูย่อไปนคีซลงไป โดยโค้คดนคีซจะจลับข้คอมยลขค้สำงตค้นมสำใสยู่อสำเรยลแลค้ว Logs ดย เพ่ืงอดยวู่ยสำ Google Apps
Script จับล ขอค้ มยลมสำเปนป็ อสำเรยอล ยสู่ย ำงไร
function getData() {
// จบลั ชีท้นข ทเีร่ิข ปปิดไว้ช ในไฟล์ต Google Sheet ใส่คตลัวแปร sheet
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() ;
// จบัล ข้ชอมูบลในเรน้ช จ์ต A2:A5 - 1 คอลลมั น์ต
var d1Col = sheet.getRange("A2:A5").getValues() ;
// จบัล ข้อช มูลบ ในเร้นช จต์ B1:D1 - 1 แถว
var d1Row = sheet.getRange("B1:D1").getValues() ; // จัลบขอช้ มบูล 1 แถว
Logger.log(d1Col) ; // ดผูบ ลทรขิ่ี Logs ตค่อ –------ > [ 01 ]
Logger.log(d1Row) ; // ดผูบ ลทข่ิรี Logs ตค่อ –------ > [ 02 ]
}
ผล
Logs
[ 01 ] [[AAA], [BBB], [CCC], [DDD]] // 1 คอลมัล น์ต - เปปน็ อาเรยต์ 2 มรตร
[ 02 ] [[XXX, YYY, ZZZ]] // 1 แถว - เปปน็ อาเรย์ต 2 มรตร
15.2. จบลั เรน้ค จใ์ย สมใ่ นอสำเรยย์ จัลบอสำเรยใ์ย สม่ในเร้คนจย์ (Google Sheets)
ขค้อนีใคซ ชคเ้ ซอรวล ิพส SpreadsheeetApp และ Method ของคลสำสตสู่ย ำงๆจสสำนวนหนถึงื่ง แต่ยกู กเ็ ปป็น Method พนงซ ๆ
ทื่คใีง ชบ้ค ูย่อยๆ
ใหค้สร้คสำงโปรเจก็ค แลค้วลองพิมพ พลโคด้ค เพื่งอทสส ำควสำมเขส้ค ำใจไปกู่ยอน
178 หลัลกการเขขียนโปรแกรม Google Apps Script โดย วสลันตต์ คณคุ ดรลกเศวต ([email protected])
15.2.ก.) จตบั เรนค้ จใล น Google Sheet มาใสู่ยในอาเรยล
ขอ้ค มยลในไฟลล Google Sheet ทชงีื่ค คีซทชงอ่ื Sheet2 มีคดัลงตยอู่ ไปนซีค
เรสำสสำมสำรถจลบั ขค้อมยลทลงัซ หมดไปใส่ยูในตัลวแปรอสำเรยลไดคด้ ัลงนซีค
function getData() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
var data = sheet.getRange(1 , // เรม่ริ แถวทีริ่ข
1
1 , // เร่มริ
คอลมัล นต์ A
sheet.getLastRow() , // 4 แถว
sheet.getLastColumn()).getValues() ;// 2 คอลมลั นต์
Logger.log(data) ; // ดผูบ ลทิ่ีรข Logs ต่คอ –------ > [ 01 ]
}
ผล – ไดค้อสำเรยล 2 มตพิ ิพ เปป็นแบบอสำเรยเล สค้น ในอสำเรยลเสน้ค
Logs
[ 01 ] [[มะนาว, 12.0], [มะพร้าค ว, 35.0], [สมค้ โอ, 45.0], [แตงโม, 50.0]]
15.2.ข.) จตบั ค่ยาู ในอาเรยล ไปใสู่ใย น Google Sheet
ขคอ้ นตคีซ รงขสค้ ำมกัลบ ข้อค กูอย่ นหนคส้ ำ เรสำจะนสส ำคส่ยู ำในอสำเรยล ไปใสู่ใย นไฟลล Google Sheet แทน
function setData() {
var Arr2dim = [
["Linda", 27] , // Arr2dim[0] ก็คก อืม อาเรย์เต สชน้ นีน้ข
["Lisa", 35] , // Arr2dim[1] กค็ก ืมอ อาเรยเ์ต ส้ชนนข้ีน
["John", 42] // Arr2dim[2] ก็กคอมื อาเรย์ตเสน้ช นี้ขน
];
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2") ;
// เรรม่ิ ทิ่รีข D1 3 แถว 2 คอลมลั น์ต
var data = sheet
.getRange(1, 4, Arr2dim.length, Arr2dim[0].length)
.setValues(Arr2dim) ;
}
บททิร่ขี 15 : เทคนคร อาเรยต์ 179
ผล – ดทย ง่เีคื ซลลล D1:E3
15.3. นสส ำคอลัลมนใย์ นชซทีค มสำคสส ำนวณ แล้คววสำงไว้คอีคกคอลลัมนย์หนง่ีทน (Google Sheets)
ขค้อนีคซ ตอยู่ เนืง่องจสำกขค้อกูย่อนหนค้สำ แตูย่จะเปป็นกสำรนสสำ map มสำใชค้คสสำนวณใน Google Sheets โดย นสสำคอลลัมนล
ในชคทีซ มสำคสสำนวณ แลว้ค วสำงไว้อค กคี คอลมลั นลหนถ่ืงงึ
ขอค้ มยลในชีซทค มดคี ลงั ต่อยู ไปนซคี
15.3.ก.) พตฒั นาการทีท่ 1
จบัล ขค้อมยลใน Google Sheet มสำ Log ดกย ่ยูอน เพอืง่ ดวย ส่ยู ำจลบั ขค้อมยลมสำถกย หรงอเปลู่ยสำ
function calcColumn() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2") ;
var data = sheet.getRange(2,1, sheet.getLastRow()-1,
sheet.getLastColumn()).getValues() ;
Logger.log(data) ; // ดผูบ ลทริข่ี Logs -------- >
}
ผล
Logs
[[1.0, LibreOffice Calc, 7600.0], [2.0, LibreOffice Base, 9000.0], [3.0, Google Apps,
7600.0], [4.0, Google Sheet, 7600.0], [5.0, Google Apps Script, 9000.0]]
180 หลกัล การเขีขยนโปรแกรม Google Apps Script โดย วสันล ต์ต คณุค ดลร กเศวต ([email protected])
15.3.ข.) พฒตั นาการท่ที 2
เรสำตอ้ค งกสำรนสส ำคอลัมล นล C เท่สูย ำนันซล มสำคสสำนวณ (คอลัมล นล "คู่าย ใชจค้ ่ยูาย" ) แล้วค วสำงลงไปในคอลลัมนทล ่คีืง D
อลันดลับแรก คสส ำนวณก้คอนข้คอมยลท่ืงคีจลับมสำจสำก Google Sheet โดยใช้ค map() ดึถงสมสำชิพกมสำคสส ำนวณ จสำกนซัลน
เอสำผลลพลั ธทล ัซงล กอ้ค น ใสกยู่ ลลบั ไปท่ีคืง Google Sheets
function calcColumn() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2") ;
var data = sheet.getRange(2,1, sheet.getLastRow()-1,sheet.getLastColumn()).getValues() ;
/* [ // คาส นวณคอลัตมนนล ้ทีน
[1.0,
[2.0, LibreOffice Calc, 7600.0],
[3.0,
[4.0, LibreOffice Base, 9000.0],
[5.0,
Google Apps, 7600.0],
Google Sheet, 7600.0],
Google Apps Script, 9000.0] ] */
var calcData = data.map(function(row){
// คาก นวณเฉพาะคอลลัมนท์ต ขี่ิร 3 – หารดว้ช ย 8 แล้ชวเกบ็ก คา่ค ไว้ชในตวัล แปร
var cost = row[2]/8 ;
// return [ row[0] , row[1] , cost ] ;
// คนร กลบลั ทั้ีงนล หมด โดยคาก นวณบางคอลลัมน์ต
return [cost] ; // คมืนกลัลบเฉพาะคอลลมั นท์ต คขรีิ่ าก นวณ
}) /* จบ map / ;
// Logger.log(calcData);
/* [ มท 5 แถว 1 คอลมัต นล
[950.0],
[1125.0],
[950.0],
[950.0],
[1125.0] ] */
// คอลมลั นตส์ ดคุ ทา้ช ยของชี้ขนท+1 จกานวนสมาชกร จาก นวนสมาชรกตลัวแรก(ในอาเรยต์)
// 2 4 5 1
sheet.getRange(2, sheet.getLastColumn()+1, calcData.length, calcData[0].length)
.setValues(calcData) ;
}
ผล – ดยคอลมลั นล D
บททรข่ิี 15 : เทคนคร อาเรย์ต 181
15.4. กรองแถววสม่ ำง หรอรื แถวทคม่ีท ีเค ซลลว์ย มส่ ำงทงพซ
ตวลั อยสู่ย ำงขคอ้ มยล ใน Google Sheets มดคี ัลงตอู่ย ไปนคซี
แถววสู่ย ำง เมอ่งื จบลั ขอค้ มลย มสำเปปน็ อสำเรยล จะได้คเปป็นอสำเรยล 2 มตพิ วิพ ส่ยู ำงๆ กค็ก อง [ [ ] , [ ] , [ ] , [ ] , [ ] , [ ] ]
โคดค้ ตยู่อไปนีซค กรองแถววูย่สำงออก แลคว้ วสำงขค้อมลย ทกคีื่ง รองแลคว้ กลับล ไปทคีงเื่ ดิพม
function filterEmptyRows() {
var ss = SpreadsheetApp.getActiveSpreadsheet() ;
var sheetData = ss.getSheetByName("Sheet3") ;
var rawData = sheetData.getRange(2,1,sheetData.getLastRow()-1, sheetData.getLastColumn())
.getValues() ;
// =========== ตัลวตรวจสอบและกรองข้ชอมลูบ ==================
var fData = rawData.filter(function(row){
return !row.every(function(cell){ // กรองตัลวทิ่ไรีข มค่ใชค่(!) ทผ่ิรีข ค่านเงืิ่มอร นไขมาจาก every-จบัล ตวลั ไมค่วา่ค ง
return cell == "" ; // ตรวจสอบวา่ค ทกุค เซลลเต์ ป็ปนค่คาวค่างหรมอื ไมค่
}); // End – every
}); // End - filter
sheetData.activate().getRange(2,1,sheetData.getLastRow()-1,sheetData.getLastColumn())
.clearContent(); // จบลั ไปทชิร่ีข นี้ทข เดรมทรีิขม่ ขีขชอ้ มลบู จากนันนี้ล ลา้ช งตัลงีน้ แต่แค ถวท่ิรีข 2 ทีงรน้ ไป
sheetData.getRange(2,1,fData.length,fData[0].length).setValues(fData);
// Logger.log(fData);
} // End function
182 หลกัล การเขยีข นโปรแกรม Google Apps Script โดย วสนัล ต์ต คณคุ ดรลกเศวต ([email protected])
หสำกตอค้ งกสำรกรองบรรทดลั ทงมคีื่ ีคเซลลวล สยู่ ำงเพยีค งบสำงเซลลลทซพิง ใหเค้ ปลยืงีค่ นจสำก every เปน็ป some
var fData = rawData.filter(function(row){
return !row.some(function(cell){ // filter ตัลวทไข่ริี มค่ใช(่ค !) ทิรีข่ผ่คานเงรืิอม่ นไขมาจาก every
return cell == "" ; // ตรวจสอบวาค่ ทุกค เซลลเต์ ปนป็ คค่าวา่ค งหรอืม ไม่ค
}); // End – every
}); // End – filter
ผล - กรองบรรทดลั ทงีม่คื คีเซลลวล สู่ย ำงทซงิพ
15.5. กสำรกรองตลวั ซซสสำในอสำเรยย์ ให้เค หลืรอแตต่ม ลัวทีทค่ไมซม่ สสซ ำ
ข้อค นคซี เปป็นกสำรกรองตัวล ซสซส ำในอสำเรยล ให้เค หลงอแตตยู่ ลัวท่คืงีไมซูย่ สซสำ
งสำนลกลั ษณะทืคเ่งี รสำตค้องกรองตวัล ซสสซ ำภสำยในอสำเรยอล อก เป็นป งสำนทคเี่ืง รสำตอ้ค งทสสำบ่อูย ยๆ เชยู่น จบลั คอลลัมนลจสำกในชซทีค
แลว้ค กรองตัวล ซสสซ ำออก เปน็ป ต้นค
หมสำยเหตุถ : ดเย พืิง่มพ เติพมเรงื่อง Remove duplicates (เมนย Tools → Remove duplicates) เปน็ป เครืงอ่ ง
มอง ใน Google Sheets ทืีค่ใง ชก้ค รองตวัล ซสสซ ำ
15.5.ก.) เทคนคิพ ทีท่ 1 - ส้ันนตี แตยู่มทประสิพทธภิพ าพสงย
โค้คดตยอู่ ไปนซคี เปป็นลอจิกพ ที่งใืค ชกค้ รองตลวั ซสซส ำทคี่เงื ขยคี นโค้คดได้สค ัซนล แตู่มย คปี ระสทิพ ธพิภสำพสงย
var arr = [ "A" , "1" , 2 , 3 , 4 , 5 , 5 , 5 , 7 , 8 , 2 , 3 , 4 , 4 , 3 , 4 , 4 ] ;
var result = [] ;
result = arr.filter(function(item,i){
return arr.indexOf(item) == i ;
// ตวลั อยาค่ ง
// [ "A" , "1" , 2 , 3 , 4 , 5 , 5 , 5 , 7 , 8 , 2 , 3 , 4 , 4 , 3 , 4 , 4 ] ;
// indexOf(2) 2 (true) 10(false)
// i 0 1 2 3 4 5 6 7 8 8 10 11 12 13 14 15 16
}) ;
Logger.log(result); // พมิพ พล : [ A , 1 , 2.0 , 3.0 , 4.0 , 5.0 , 7.0 , 8.0 ]
บททรีข่ิ 15 : เทคนคร อาเรยต์ 183
15.5.ข.) เทคนพคิ ทท่ี 2 - แยกสมาชกพิ ในอาเรยลทซ่ที นีส้าและไมซู่ย ีนส้าออกเปน็ป อาเรยล 2 ก้คอน
โคดค้ ตู่อย ไปนีซค แยกสมสำชิกพ ในอสำเรยทล ่งคืีซซสสำและไมูย่ซสซสำออกเป็นป อสำเรยล 2 กอ้ค น
var arr = [37, 39, 42, 46, 46, 11, 33, 11] ; // กอช้ นทิรไข่ี มค่ซนากี้
// กอช้ นทซ่ิรีข า้นีก
var uniqueDays = [] ;
var dupDays = [] ;
arr.forEach(function(d){
if(uniqueDays.indexOf(d) === -1) {
uniqueDays.push(d) ;
}else{
dupDays.push(d) ;
}
}); // Close forEach
Logger.log(uniqueDays) ; // [ 37.0, 39.0, 42.0, 46.0, 11.0, 33.0 ]
Logger.log(dupDays) ; // [ 46, 11 ]
ขัซนล ตอน
ลปย d uniqueDays uniqueDays.indexOf(d) uniqueDays.push(d)
-1 (false) [37]
1 37 [] -1 (false)
-1 (false) [37, 39]
2 39 [37] -1 (false) [37, 39,42]
3 (true) [37, 39, 42, 46]
3 42 [37, 39] -1 (false) [37, 39, 42, 46]
-1 (false) [37, 39, 42, 46, 11]
4 46 [37, 39,42] 4 (true) [37, 39, 42, 46, 11, 33]
[37, 39, 42, 46, 11, 33]
5 46 [37, 39, 42, 46]
6 11 [37, 39, 42, 46]
7 33 [37, 39, 42, 46, 11]
8 11 [37, 39, 42, 46, 11, 33]
15.6. กสำรกรองตลวั ซสสซ ำในอสำเรย์ย ใหคเ้ หลืรอแต่มตวัล ทมีคท่ คีกสำรซสสซ ำ
ปรลงั แตง่ค จาก
https://stackoverflow.com/questions/840781/get-all-non-unique-values-i-e-duplicate-more-than-one-occurrence-in-an-array
กลับล กนลั กลบั ขอ้ค ก่อูย นหน้สค ำ ขอ้ค นคีซเปน็ป กสำรกรองอสำเรยลใหคเ้ หลงอแต่ตูย วัล ทีื่ซงค สสซ ำ
var input = [ 'A', 'B', 'C', 'A', 'C', 'A' ] ;
var duplicates = input.reduce(function(acc, el, i, arr) {
if (arr.indexOf(el) !== i && acc.indexOf(el) < 0) {
acc.push(el) ;
} // Close - if
return acc ;
}, [] ) ; // Close - reduce
Logger.log(duplicates) ; // ผล : [ A, C ]
184 หลลกั การเขขียนโปรแกรม Google Apps Script โดย วสลันตต์ คณคุ ดลร กเศวต ([email protected])
กสำรวนลยปของโค้ดค ขคส้ ำงต้คน
ลยป acc el i arr arr.indexOf(el) !== i && acc.push(el) return
acc.indexOf(el) < 0 [] []
[] []
1 [] A 0 [ 'A', 'B', 'C', 'A', 'C', 'A' ] arr.indexOf('A') !== 0 && [] []
[A] [A]
acc.indexOf('A') < 0
[A,C] [A,C]
0 !== 0 && -1 < 0 [A,C] [A,C]
0 && 1
0 (false)
2 [] B 1 [ 'A', 'B', 'C', 'A', 'C', 'A' ] arr.indexOf('B') !== 1 &&
acc.indexOf('B') < 0
1 !== 1 && -1 < 0
0 && 1
0 (false)
3 [] C 2 [ 'A', 'B', 'C', 'A', 'C', 'A' ] arr.indexOf('C') !== 2 &&
acc.indexOf('C') < 0
2 !== 2 && -1 < 0
0 && 1
0 (false)
4 [] A 3 [ 'A', 'B', 'C', 'A', 'C', 'A' ] arr.indexOf('A') !== 3 &&
acc.indexOf('A') < 0
0 !== 3 && -1 < 0
0 && 1
1 (true)
5 [A] C 4 [ 'A', 'B', 'C', 'A', 'C', 'A' ] arr.indexOf('C') !== 4 &&
acc.indexOf('C') < 0
2 !== 4 && -1 < 0
1 && 1
1 (true)
6 [A,C] A 5 [ 'A', 'B', 'C', 'A', 'C', 'A' ] arr.indexOf('A') !== 5 &&
acc.indexOf('A') < 0
0 !== 4 && 0 < 0
1 && 0
1 (false)
บททริี่ข 15 : เทคนคร อาเรย์ต 185
15.7. กรองตลัวซสสซ ำในอสำเรย์ย ใหเ้ค หลือร แตมต่ ลวั ทคที่ Unique
ข้คอนคีซ ใหผ้ค ลเหมงอนกัลบกสำรใชฟค้ งัฝ กชล ลนืงั่ UNIQUE() ของ Google Sheets
โคด้ค
var arr = [ 'A', 'B', 'C', 'A', 'C', 'A' ] ;
var uniqueInArr = [] ;
arr.forEach(function(item){
if( uniqueInArr.indexOf(item) === -1)
{
uniqueInArr.push(item)
} // Close - if
}) ; // Close - forEach
Logger.log(uniqueInArr) ; // [A, B, C]
15.8. กสำรกรองตัลวซซสสำในอสำเรย์ย 2 มพตพ ใหค้เหลอืร แตแ่ม ถวทค่ีท Unique
15.8.ก.) วธิพ ทท ท่ี 1
กสำรจลับขค้อมยลจสำก Google Sheets มลกั ได้มค สำเป็ปนอสำเรยล 2 มติพ พิ กสำรกรองตลวั ซซสส ำในข้คอนซีค เหมสำะกัลบกสำรกรอง
แถวซสสซ ำทจ่งคืี ับล มสำจสำก Google Sheets
โคด้ค
const arr = [
[ 1 , 'A' ] ,
[ 2 , 'B' ] ,
[ 3 , 'C' ] ,
[ 1 , 'A' ] ,
[ 1 , 'A' ] ,
[ 2 , 'B' ]
];
var uniques = [] ;
var itemsFound = {} ;
for(let i = 0, l = arr.length ; i < l ; i++) {
var stringified = JSON.stringify(arr[i]) ;
if(itemsFound[stringified]) { continue ; }
uniques.push(arr[i]) ;
itemsFound[stringified] = true ;
}
Logger.log(uniques) ; // [[1.0, A], [2.0, B], [3.0, C]]
186 หลักล การเขยีข นโปรแกรม Google Apps Script โดย วสนลั ต์ต คณุค ดลร กเศวต ([email protected])
15.8.ข.) วธพิ ทท ท่ี 3
How to get distinct values from an array of arrays in JavaScript using the filter() method? [duplicate]
https://stackoverflow.com/questions/57562611/how-to-get-distinct-values-from-an-array-of-arrays-in-javascript-using-the-filte
โคดค้
let x = [["A", 2], ["B", 4], ["A", 2]] ;
var unique = x.map( ar => JSON.stringify(ar) )
// [ '[A,2]', '[B,4]', '[A,2]' ]
.filter(( itm, idx, arr) => arr.indexOf(itm) === idx )
// [ '[A,2]', '[B,4]' ]
.map( str => JSON.parse(str)) ;
// [ [ A, 2 ], [ B, 4 ] ]
Logger.log(unique) ;
const sum = unique[0][1] + unique[1][1]
console.log(sum) ; // 6
15.9. เปรคยี บเทีคยบอสำเรยย์ 2 กคอ้ น
15.9.ก.) เปรยท บเททยบอาเรยล 2 กอค้ น เกลบ็ ตตวั ทที่ไมู่ซย นส้ีากนตั ไวค้
ตวลั อยู่สย ำง
// อาเรยกต์ อช้ นทขริ่ี 1 – ถบูกเปรยขี บเทยีข บ - จลบั จากเรนก็ จใ์ต น Google Sheets 1 แถว
//
var arrData2Dims = [[ 'D' , 'C' , 'X' , 'B' ]] ;
var arrData1Row = arrData2Dims[0] ; // [ D , C , X , B ]
// อาเรยก์ต อช้ นทขิี่ร 2 – ใชเ้ช ปรขียบเทยขี บ - จัลบจากเรกน็ จใ์ต น Google Sheets 1 เซลลต์
//
var findArr = [[ 'X' ]] ;
var findVal = findArr[0][0] ; // X
var filterOut = [] ; // ผล : [ D, C, B ]
arrData1Row.forEach(function(item){
if(item != findVal){
filterOut.push(item);
}
}) ; // Close - forEach
Logger.log(filterOut) ;
บททีข่ริ 15 : เทคนคร อาเรย์ต 187
15.9.ข.) เปรยท บเททยบอาเรยล 2 กคอ้ น เกบ็ล ตตัวท่ีทไมู่ซย นีส้ากนตั ไวค้ วิธพ ทท ่ที 2
ตวัล อยสูย่ ำง
var arrFrm = [ 1 , 2 , 7 ] ;
var arrFull = [ 0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ] ;
var filOut = [] ;
arrFull.forEach(function(a){
if(arrFrm.indexOf(a) == -1 ){
filOut.push(a) ;
}
}) ;
Logger.log(filOut) ; // ผล : [0.0 , 3.0 , 4.0 , 5.0 , 6.0 , 8.0 , 9.0]
หมายเหตจุ
ถส้ค ำจะเก็กบตัลวซซสส ำบรรทัดล ตอยู่ ไปนคีแซ กค้เปปน็
if(arrFrm.indexOf(a) == -1 ) → if(arrFrm.indexOf(a) != -1 )
15.10. กรองเซลลย์วส่ม ำงทซงพ (ขค้อมลูม 1 คอลลมั น์ย)
ขคอ้ มยลใน Google Sheets ชทซีค มคีดงลั ตอ่ยู ไปนคซี
188 หลกัล การเขีขยนโปรแกรม Google Apps Script โดย วสนัล ตต์ คณคุ ดลร กเศวต ([email protected])
โค้คดต่ยูอไปนคีซ จลับคสยู่ ำในเซลลล A2:F12 แตเยู่ ซลลล A9:A12 เปน็ป เซลลลวยู่สำง ซถง่ืึง เรสำจะกรองคยสู่ ำวยสู่ ำงทจ่ืคีง บลั มสำไดค้ทซิงพ ไป
function filterEmpCell(){
var valCatCodes = ss.getRange(' A2:A12')
.getValues()
// [[OTC], [DGG], [DGB], [CTG], [CTB], [OPT], [DCC], [], [], [], []]
.reduce(function(total, value) {
return total.concat(value) ;
},[])
// [OTC, DGG, DGB, CTG, CTB, OPT, DCC, , , , ]
.filter(function(e){
return e ;
// [OTC, DGG, DGB, CTG, CTB, OPT, DCC]
});
Logger.log(valCatCodes) // [OTC, DGG, DGB, CTG, CTB, OPT, DCC]
}
15.11. ใช้ค filter() กรองตสำรสำงขค้อมูลม ใน Google Sheet
JavaScript Filter Method Tutorial - Google Sheets Apps Scripts - Array Methods Part 7
https://youtu.be/PT_TDhMhWsE?list=PLv9Pf9aNgemvD9NFa86_udt-NWh37efmD
ตสำรสำงข้อค มยลทง่ืจีค ะใชค้ทดสอบ มขีค ้คอมลย ดลงั ตอยู่ ไปนคซี
บททิร่ขี 15 : เทคนคร อาเรย์ต 189
15.11.ก.) พฒัต นาการทีท่ 1 : จัตบค่ยาู ในคอลมัต นมล ากรอง
กอูย่ นอน่งื ๆ จลับคสูย่ ำในคอลัลมนล มสำกรองตสำมเงอ่งื นไข ออกมสำ Log ดกย อู่ย น
ตวัล อยสูย่ ำงโคคด้ นีซค เอสำเฉพสำะคส่ยู ำในคอลัลมนล "Instructor" (E) ท่มงีืค คีคสู่ย ำเปป็น Por ออกมสำ Log ดย
function filterArr() {
var ss = SpreadsheetApp.getActiveSpreadsheet() ;
var sCrs = ss.getSheetByName("OurCourse") ;
var dCrs = sCrs.getRange(2,1,sCrs.getLastRow()-1,sCrs.getLastColumn()).getValues() ;
var nInstr = "Por" ;
// จบัล ฟังฟ กช์ต รน่ิัล ทใ่ีิรข ชก้ช รองยลัดลงไปใน filter เลย
var fData = dCrs.filter(function(row){
return row[4] === nInstr ;
}) ;
Logger.log(fData) ; // ดผูบ ลทีริข่ Logs –---------------- >
}
ผล – มคี 2 บรรทดลั ทง่ผีคื สู่ย ำนกสำรกรอง
Logs ]
[01] [ [1.0, LibreOffice Writer : Basic, 7600.0, LibreOffice, Por, 6.0],
[3.0, LibreOffice Calc : Basic, 7600.0, LibreOffice, Por, 6.0 ]
15.11.ข.) พฒัต นาการทีท่ 2 : ใสูผ่ย ลการกรองกลบัต ไปท่ทีชี้ททน
เมงื่อจัลบคยู่สำทืงค่ีต้คองกสำรและกรองเรคียบร้คอยแลค้ว ถลัดมสำจะเป็ปนกสำรใสยู่กลลับไปใน Google Sheet ทีงคื่ชีซคทใหมู่ยทีง่ืค
สรสค้ ำงโดยใช้คโคด้ค
function filterArr() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sCrs = ss.getSheetByName("OurCourse");
var dCrs = sCrs.getRange(2,1,sCrs.getLastRow()-1,sCrs.getLastColumn()).getValues();
var nInstr = "Por" ;
var fData = dCrs.filter(function(row){ return row[4] === nInstr ; });
// สรชา้ งชนีข้ทใหมคส่ าก หรบัล เกบก็ ผลการกรอง
var sTarget = ss.insertSheet("Courses by "+ nInstr);
// ใสค่ขชอ้ มลูบ ทกีิร่ข รองแลช้ว ลงไปในชน้ขีท
sTarget.getRange(2, 1 ,fData.length, fData[0].length).setValues(fData);
}
ผล
190 หลกัล การเขีขยนโปรแกรม Google Apps Script โดย วสนลั ต์ต คณุค ดลร กเศวต ([email protected])
15.11.ค.) พฒตั นาการท่ีท 3 : กรอง 2 เง่อทีร นไข
โค้คดนคซีจะเป็ปนกสำรกรองแบบ 2 เงง่ือนไข กก็คงอ กรองผ้คมูสอนเป็ปน Wasankds และ คม่สำใชค้จ่มสำยต่มอคอรพ์ส
มสำกกว่มสำ 10,000 บสำท
function filterArr() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sCrs = ss.getSheetByName("OurCourse");
var dCrs = sCrs.getRange(2,1,sCrs.getLastRow()-1,sCrs.getLastColumn()).getValues();
var nInstr = "Wasankds" ;
var fData = dCrs.filter(function(row){ // กรอง 2 เงรือ่ิม นไข
return row[4].toLowerCase() === nInstr.toLowerCase() && row[2] > 10000 ;
});
// Logger.log(fData);
// สร้ชางชขนท้ี ใหมคส่ กาหรลับเก็บก ผลการกรอง
var sTarget = ss.insertSheet("Courses by "+ nInstr);
// ใสขค่ อ้ช มูบลที่ิกขร รองแล้วช ลงไปในช้ีขนท
sTarget.getRange(2,1,fData.length,fData[0].length).setValues(fData);
}
ผล
หมายเหตุจ 1
กรณทกรองแล้คว ไม่มมทบรรทรดไหนผ่มสำนกสำรกรองเลย ใหค้เรสำใช้ค if ตรวจสอบดค้วย ไมูย่เช่ยูนนลัซน โค้คดจะ Error
ในขลนซั ตอนเขยีค นผลกสำรกรองกลลบั ไปทคีงื่ Google Sheets ใหแค้ ก้คโคด้ค เปน็ป ดงัล ตอู่ย ไปนคีซ
if(fData.length > 0) { // ตรวจสอบจาก นวนสมาชกร ในอาเรยต์ผลการกรอง
sTarget.getRange(2,1,fData.length,fData[0].length).setValues(fData);
} else {
sTarget.getRange(2,1,1.1).setValue("ไมมยู่ ทขอ้ค มลย ทีทผ่ ู่ยานการกรอง");
};
บททีริ่ข 15 : เทคนคร อาเรย์ต 191
หมายเหตุจ 2
กสำรกรองแบบ 2 เงืง่อนไข กรณทเชี่ทือร มกสำรกรองแบบ Or ใชค้ Operator เปป็น || (Double Pipes) กสำรใชคง้ สำน
ยกตวลั อยยสู่ ำงเชนู่ย
var fData = dCrs.filter(function(row){
return row[4] === "Por" || row[4] === "PoE Club" ; // กรอง 2 เงริ่อืม นไขแบบ Or
}) ;
ผล – กรองโดยเช่ืงอมเงงอื่ นไขแบบ Or
15.12. ทสส ำ VLOOKUP ดว้ค ยอสำเรย์ย
ในข้คอนคีซ เปป็นตัลวอยู่ยสำงกสำรทสส ำ Lookup ทืคี่งใหค้ผลลัลพธลคล้คสำยกลับฟัฝงกลชงัลื่น VLOOKUP ก็กคงอ สู่ยงตัลวคค้นหสำไปยลัง
ตสำรสำงข้คอมยล จสำกนลซันคค้นหสำในคอลัลมนลที่งืคระบถ หสำกเจอขค้อมยลทงีื่คตรงกลันใหค้คงนคยู่สำคอลลัมนลตสำมทคีงื่ระบถในแถวทคื่ีงพบ
ขอค้ มลย กลบลั มสำ
ตรวอยม่สำง – สีคเขีคยวคงอตสำรสำงข้คอมยล เซลลล F2 คงอเซลลลทืงีค่จะใชค้ Lookup ถค้สำ Lookup ในตสำรสำงขค้อมยลแลค้ว
แล้วค เจอคูสย่ ำตรงกลัน จะคงนคูสย่ ำในแถวเดียค วกลัน คอลัมล นลทงคี่ื 3 กลลับมสำใสยใู่ นเซลลล G2
192 หลัลกการเขียข นโปรแกรม Google Apps Script โดย วสนัล ต์ต คณคุ ดรลกเศวต ([email protected])
โคดค้
var ss = SpreadsheetApp.getActiveSpreadsheet() ;
var sheet = ss.getActiveSheet() ;
// (1.) จัลบค่าค ในคอลัลมน์ตท่รีขิจะไปคนช้ หา >> แปลงเปน็ป อาเรยต์ 1 มรตร - เพราะ indexOf ใชช้ได้ชกลับอาเรยต์ 1 มตร เร ทาค่ นลันี้น
var columnToLookup = sheet.getRange('A2:A13').getValues() ;
columnToLookup = columnToLookup.map(function(r){
return r[0] ;
});
Logger.log(columnToLookup)
// [OTC0020, OTC0021, OTC0022, OTC0023, DGG1520, DGG0715, DGG0017, DCC0050, DCC0040, DCC0030, DCC0020, DCC0010]
// (2.) จบลั ค่าค ทใี่ขริ ชเ้ช ป็ปนตวลั คน้ช หา เชน่ค DGG1520 // DGG1520
var lookupValue = ss.getRange('F2').getValue() ;
Logger.log(lookupValue) ;
// (3.) ใชช้ค่าค ทเิีรข่ ปปน็ ตวลั ค้นช หา ไปคชน้ ในคอลตัมนลท่ขิีจร ับล มา >> ไดด้ช รรนตขี าก แหนง่ค กลบัล มา (ถ้าช ไมคเ่ จอได้ช -1)
var index = columnToLookup.indexOf(lookupValue) ; // ************
Logger.log(index) ; // 4.0 (แถวท่ิขรี 4+1)
// (4.) กรณเขี จอคายู่ ทที่คนช้ หา >> จบัต ขอค้ มยลทงีน้ตั แถวทตท่ี รงกนตั ออกมา
var rowData = sheet.getRange('A2:D13').getValues()[index] ;
Logger.log(rowData) ; // [DGG1520, DGG, อาบนกาี้น และตัลดขนหมา (15-20 กก.) , 550.0]
// (5.) กรณขีเจอค่คาทครีขิ่ ้ชนหา >> จับต เซลลใล นคอลมัต นทล ขี่ท ้อค มลย ตรงกตันออกมา
var columnToGet = 3 ;
var cellData = sheet.getRange('A2:D13').getValues()[index][columnToGet-1] ;
Logger.log(cellData) ; // อาบนกี้นาและตัลดขนหมา (15-20 กก.)
// (6.) เซก็ตคค่าทจขรีิ่ บัล มาไดช้ ไปทเข่ริี ซลล์ต G2
var lookupValue = ss.getRange('G2').setValues([[cellData]]) ;
15.13. ทสส ำ Lookup แบบคืรนหลสำยค่มสำ
ปรตับแตูงย่ จาก
https://stackoverflow.com/questions/36631641/javascript-indexof-method-with-multiple-values
ตวร อยส่ม ำงทท่ี 1 - ในอสำเรยลมคคี สู่ย ำที่คซงื สซส ำกันล หลสำยตวัล เรสำจะ Lookup เพ่งือจบลั ตสสำแหนูย่งวยู่สำ ขคอ้ มยลทีเ่งืค รสำคค้นหสำ อยู่ย
ในตสส ำแหนงู่ย ท่งคืีเทสยู่ ำไรบค้สำง
function Lookup_return_multiple(){
var array = [ "test234", "test9495", "test234", "test93992", "test234" ] ;
var newArr = [] ;
for ( i=0 ; i<array.length ; i++) {
if (array[i].indexOf("test234") >= 0 ) {
newArr.push(i) ;
}
}
Logger.log(newArr) ; // [0.0, 2.0, 4.0]
}
บทท่ิรขี 15 : เทคนคร อาเรย์ต 193
ตวร อย่มสำงทที่ 2 – พลฒั นสำจสำกตัลวอยสยู่ ำงกูย่อนหนส้ค ำ เรสำจะจลบั คสู่ย ำทีซืคง่ สสซ ำกันล ออกมสำ
function Lookup_return_multiple(){
var array = [ "test234", "test9495", "test234", "test93992", "test234" ] ;
var newArrData = [] ;
for ( i=0 ; i<array.length ; i++) {
if (array[i].indexOf("test234") >= 0 ) {
newArrData.push(array[i]) ;
}
}
Logger.log(newArrData) ; // [test234, test234, test234]
}
หรอง ใชค้ forEach แทน for ก็กได้ค
function Lookup_return_multiple_using_forEach(){
var array = [ "test234", "test9495", "test234", "test93992", "test234" ] ;
var newArrData = [] ;
array.forEach(function(item,i){
if (array[i].indexOf("test234") >= 0 ) {
newArrData.push(array[i]) ;
} ; // Close - if
}) ; // Close - forEach
Logger.log(newArrData) ; // [test234, test234, test234]
}
15.14. วนลูมปเซซต็ ขค้อมมูลลงใน Google Sheets
วธิพ ทคี ่คืงีงสู่ย ำยในกสำรเซ็ตก ขคอ้ มยลลงไปใน Google Sheets กค็ก อง ใชค้ Method setValues แตตูย่ ้คองจลบั มิตพ ขิพ องเร้นค จลใหค้
พอดีค กลับมติพ พิของขค้อมยลทืคี่งจะเซ็ตก ลงไป
เชูยน่
เรสำจะเซ็กตขค้อมยลลง Name range ท่งคืีมีคมพิตพิ 7x30 แตยู่ข้คอมยลทค่ืงีจะเซก็ตลงไปมีคมิพติพ 7x18 setValues จะใช้คงสำน
ไมูย่ไดค้ วธิพ แีค กก้ค ก็คอง ใช้ค for 2 ลยปวนเซ็ลตขอ้ค มลย ลงไปททละตวัต โดยใชค้ setValue (ไม่ยูมคี s)
194 หลลักการเขีขยนโปรแกรม Google Apps Script โดย วสัลนตต์ คณคุ ดลร กเศวต ([email protected])
ตวร อยส่ม ำง – จลบั คูย่สำใน Name range จสำกนันลซ กรองเซลลวล สูย่ ำงทิพงซ แลค้วเซ็ตก กลบัล ไปยลังตสสำแหนูย่งเดมพิ ใหมู่ย
กสำรใช้คงสำนโคคด้ นซคี สสำมสำรถประยถกตลใช้ใค นกสำรโหลดขค้อมลย ไปยังล อคกี ชซทคี หรงออกีค ไฟลลได้ค
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Test') ;
var nr_dcItemsTable = 'dcItemsTable' // eg. sheet1!A13:G42
// จบลั ข้ชอมบลู ใน Name range + กรองแถววคา่ งทร้ีนง
var dcItemsTable = ss.getRangeByName(nr_dcItemsTable)
.getRangeByName(nr_dcItemsTable)
.getValues()
.filter(function(row){
return !row.every(function(cell){ // กรองตวลั ทิร่ขไี มค่ใช่ค(!) -
return cell == "" ; // ถช้าวาค่ งทคกุ เซลล์ใต น 1 แถว คนมื คค่า จรงร
}) ; // close – every
}) ; // close - filter
// จบลั เซลลแต์ รกใน Name range // A13
var nr_dcItemsTable_1st = ss.getRangeByName(nr_dcItemsTable).getCell(1, 1) ; // 13
var nr_dcItemsTable_1st_col = nr_dcItemsTable_1st.getColumn() ; // 1
var nr_dcItemsTable_1st_row = nr_dcItemsTable_1st.getRow() ;
// วนลปบู เซต็ก คา่ค ลงไปทลีข ะเซลลต์ - โดยเรมริ่ จากเซลล์แต รกใน Name range
for(var r = 0 ; r < dcItemsTable.length ; r++){ // แตค่ละแถว
for(var c = 0 ; c < dcItemsTable[r].length ; c++){ // แตลค่ ะคอลมัล นใต์ นแตค่ละแถว
sheet.getRange(nr_dcItemsTable_1st_row + r , nr_dcItemsTable_1st_col + c )
.setValue(dcItemsTable[r][c]) ;
} // close - for #2 - inner
} // close - for #1 – outter
15.15. แทรกคอลลัมน์ยลงในอสำเรยย์ 2 มพตพ
ตวัล อยู่สย ำงตอู่ย ไปนีซค แทรกคอลมนลั นลแรกเพงพ่มืิ ใหคก้ บลั อสำเรยล 2 มติพ ิพ
var arr2dim = [ ["Linda", 27, "Bangkok" ] ,
["Lisa", 35, "Nontaburi" ] ,
["John", 42, "Petchaboon" ] ] ;
// แทรกคอลมัล น์ลต งไปท่ตีขิร กาแหนคง่ แรกสดคุ – ใช้ช unshift
arr2dim.map(function(row) {
return row.unshift('1stCol') ;
}) ;
Logger.log(arr2dim) ;
ผล – สังล เกตผถ ลลพลั ธทล งีค่ื Log map เข้คสำไปเปลง่ีคืยนอสำเรยลดัลงซ เดิมพ แตยตู่ ลัวทีงื่คเขสค้ ำไปเปลืยงีค่ นคอง unshift
Logs Linda, 27.0, Bangkok ] ,
Lisa, 35.0, Nontaburi ] ,
[ [ 1stCol, John, 42.0, Petchaboon ] ]
[ 1stCol,
[ 1stCol,
บทท่ิีรข 15 : เทคนคร อาเรยต์ 195
15.16. จบลั คอลัมล นอย์ อกมสำจสำกอสำเรย์ย 2 มตพ พ
ตวัล อยสู่ย ำงตยู่อไปนีคซ จลบั คอลลมั นลออกมสำจสำกอสำเรยล 2 มพติ ิพ ใชเ้ค ทคนิคพ งู่สย ำยๆ แคูเ่ย พคียง return คูย่สำกลลบั มสำ
โคด้ค
var arr2dim = [ ["Linda", 27, "Bangkok" ] ,
["Lisa", 35, "Nontaburi" ] ,
["John", 42, "Petchaboon" ] ] ;
arr2dim.map(function(row) {
return row[1] ;
}) ;
Logger.log(arr2dim) ; // ดบผู ลทขิรี่ Logs ------------------- >
var col1 = arr2dim.map(function(row) {
return row[0] ;
}) ;
Logger.log(col1) ; // ดผบู ลทิ่ขรี Logs ------------------- >
ผล
Logs
[01] [ [Linda, 27.0, Bangkok] , [Lisa, 35.0, Nontaburi] , [John, 42.0, Petchaboon] ]
[02] [ Linda, Lisa, John ]
15.17. กสำรรวมอสำเรยย์ 2 มตพ พ
โคด้ค
var arr2dim = [ ["Linda", 27, "Bangkok" ] ,
["Lisa", 35, "Nontaburi" ] ,
["John", 42, "Petchaboon" ] ] ;
var arr2ad = [ ["X" , "A"] ,
["Y" , "B"] ,
["Z" , "C"] ] ;
var comArr = [arr2dim[0] , arr2ad[0]] // [[Linda, 27.0, Bangkok], [X, A]]
var comArr2 = [...arr2dim[0] , ...arr2ad[0]] // [Linda, 27.0, Bangkok, X, A]
Logger.log(comArr) ;
Logger.log(comArr2) ;
var comArr3 = [] ;
for(let i = 0 ; i < arr2dim.length ; i++){
comArr3.push([...arr2dim[i] , ...arr2ad[i]]) ;
}
Logger.log(comArr3) // ดผูบ ลทิรข่ี Logs ------------------ >
196 หลลักการเขียข นโปรแกรม Google Apps Script โดย วสัลนตต์ คณคุ ดลร กเศวต ([email protected])
ผล
[] [ [ Linda, 27.0, Bangkok, X, A ] ,
[ Lisa, 35.0, Nontaburi, Y, B ] ,
[ John, 42.0, Petchaboon, Z, C ] ]
15.18. ทสสำทรสำนสโพสอสำเรย์ย 2 มตพ พ
ตวลั อยสู่ย ำงตอยู่ ไปนซีค ทสส ำทรสำนสโพสอสำเรยล 2 มติพ ิพ กกค็ อง กลลับแถวเป็ปนคอลมัล นกล ลบัล คอลมลั นลเปป็นแถว
// อาเรย์ต 2 มรตร - มีข 1 แถว
var array = [ [ 'A' , 'B' , 'C' , 'D' , 'E' ] ] ;
// แบบทขีริ่ 1
var arrayTran2 = array[0].map((col, i) => array.map(row => [i+1,row[i]] )) ;
// แบบทีขิ่ร 2
var arrayTran3 = array[0].map((col, i) => {
return array.map( row => {
return [i+1,row[i]] ;
}) ;
}) ;
// แบบทีขร่ิ 3
var arrayTran4 = array[0].map((col, i) => array.map( row => row[i] ) ;
Logger.log(arrayTran2) ; // [[[1.0, A]], [[2.0, B]], [[3.0, C]], [[4.0, D]], [[5.0, E]]]
Logger.log(arrayTran3) ; // [[[1.0, A]], [[2.0, B]], [[3.0, C]], [[4.0, D]], [[5.0, E]]]
Logger.log(arrayTran4) ; // [[A]], [[B]], [[C]], [[D]], [[E]]
15.19. หสำคส่ม ำสูมงสุถดตสส ำสดถุ ในอสำเรย์ย โดยใช้ค Spread operator – Chrome V8
ถ้คสำเปป็น Apps Script หรงอ Javascript รถยู่นเกูย่สำจะทสส ำยสำก แตู่ยพอเป็ปน Chrome V8 หรงอ Javascript ES6
กสำรหสำค่ยสู ำสงย สถดตส่งืส ำสดถ ในอสำเรยจล ะกลสำยเปป็นเรอ่งื งง่ยูสำย โดยใชค้ Spread operator (3 จจุด)
ตวลั อยูย่สำง
const array = [ 15, 21, 3, 14, 54 ] ;
Logger.log(Math.max(...array) ) ; // 54
Logger.log(Math.min(...array) ) ; // 3
บททีิร่ข 15 : เทคนคร อาเรย์ต 197
15.20. สรคส้ ำงอสำเรยยว์ ส่ม ำง
javascript create empty array of a given size
https://stackoverflow.com/questions/34937349/javascript-create-empty-array-of-a-given-size/34937412
Most efficient way to create a zero filled JavaScript array?
https://stackoverflow.com/questions/1295584/most-efficient-way-to-create-a-zero-filled-javascript-array
ตวลั อยสูย่ ำง
var len = 5 ; // ดผบู ลทีริข่ Logs ------------------- > [ 01 ]
var x = new Array(len) ;
Logger.log(x) ;
var y = new Array(len).fill(0) ;
Logger.log(y) ; // ดผูบ ลท่ิรีข Logs ------------------- > [ 02 ]
var z = Array.from({ length: 4 })
Logger.log(z) ; // ดผูบ ลทขรี่ิ Logs ------------------- > [ 03 ]
var w = Array.from({ length: 4 }).map((mem, i) => i)
Logger.log(w) ; // ดผบู ลทขีริ่ Logs ------------------- > [ 04 ]
ผล
Logs
[ 01 ] [null, null, null, null, null]
[ 02 ] [0.0, 0.0, 0.0, 0.0, 0.0]
[ 03 ] [null, null, null, null ]
[ 04 ] [0.0, 1.0, 2.0, 3.0]
15.21. สรคส้ ำงอสำเรย์ยวส่ม ำง 2 มตพ พ
15.21.ก.) สรคา้ งอาเรยลว่ายู ง 2 มิตพ พิ
สรค้สำงอสำเรยลวยสู่ ำง 2 มตพิ พิ จสสำนวนสมสำชกิพ ตสำมกสสำหนด
// แถว คอลมลั นต์
var arr2dim = Array.from(Array(5), () => new Array(3)) ;
// หรืมอแบบนกี้นข ก็ไดช้
// var arr2dim = Array.from(new Array(5), function(){ return new Array(3) })
Logger.log(arr2dim) ;
// [ [null, null, null],
[null, null, null],
[null, null, null],
[null, null, null],
[null, null, null] ]
198 หลักล การเขขียนโปรแกรม Google Apps Script โดย วสลันต์ต คณุค ดรลกเศวต ([email protected])
สรส้ค ำงอสำเรยวล ยสู่ ำง 2 มิพตพิ จสสำนวนสมสำชกิพ ตสำมกสสำหนด วธิพ ีทค งื่คี 2 (นสู่ย ำจะเขค้สำใจงู่สย ำยกวสยู่ ำ)
var arr = Array(2).fill(null).map(() => Array(4)) ;
arr[0][0] = "XX"
Logger.log(arr) ;
// [ [XXl, null, null, null],
[null, null, null, null] ]
15.21.ข.) วนลปย กาส หนดคยาู่ ใหคก้ ตับอาเรยล 2 มิตพ ิพ
ตรวอยสม่ ำง – วนลยปกสส ำหนดคูยส่ ำให้คกลับอสำเรยล 2 มตพิ พิ
// สร้ชางอาเรยต์วา่ค งขนาด 5x3
var arr2dim = Array.from(new Array(5), function(){ return new Array(3) })
Logger.log(arr2dim) ;
for( let i=0 ; i<arr2dim.length ; i++ ){
for( let j=0 ; j<arr2dim[0].length ; j++ ){
arr2dim[i][j] = "R"+(i+1)+"C"+(j+1)
}
}
Logger.log(arr2dim) ;
[ [R1C1, R1C2, R1C3],
[R2C1, R2C2, R2C3],
[R3C1, R3C2, R3C3],
[R4C1, R4C2, R4C3],
[R5C1, R5C2, R5C3]]
ตวร อยส่ม ำง – วนลยปกสสำหนดคสู่ย ำให้คกบลั อสำเรยล 2 มิตพ พิ โดยใช้คค ส่ยู ำจสำกสมสำชกพิ ของอสำเรยตล วลั องน่ื ๆ
const rows = [11,12,13,14,15,16,17,18]
const cols = ["A","B","C"]
var arr2dim = Array.from(Array(rows.length), () => new Array(cols.length)) ;
for( let i=0 ; i<arr2dim.length ; i++ ){
for( let j=0 ; j<arr2dim[0].length ; j++ ){
arr2dim[i][j] = cols[j]+rows[i]
}
}
Logger.log(arr2dim) ;
[ [A11, B11, C11],
[A12, B12, C12],
[A13, B13, C13],
[A14, B14, C14],
[A15, B15, C15],
[A16, B16, C16],
[A17, B17, C17],
[A18, B18, C18] ]
บททริีข่ 15 : เทคนคร อาเรยต์ 199
15.22. SUM แถวและคอลมลั นยใ์ นอสำเรยย์ 2 มพตพ
โคดค้
function myFunction() {
const arr = [
[1, 22, 111 ],
[2, 15, 125],
[3, 12, 215],
[4, 30, 230]
];
// SUM of each ROWS =======================
arr.map( (row,i,self) => {
return self[i].push( row.reduce( (total, cval) => total + cval,0) )
})
Logger.log(arr) ;
// [[1.0, 22.0, 111.0, 134.0],
// [2.0, 15.0, 125.0, 142.0],
// [3.0, 12.0, 215.0, 230.0],
// [4.0, 30.0, 230.0, 264.0]]
// SUM of each COLUMNS =======================
var sumCols = []
arr.forEach( (row) =>{
row.forEach( (cell,j) => {
if(sumCols[j]){
sumCols[j] += cell ;
}else{
sumCols[j] = cell ;
} // else
}) // forEach
}) // forEach
Logger.log(sumCols) ;
// [10.0, 79.0, 681.0, 770.0]
//===============================================
// แทรกไว้ชแถวลา่ค งสคดุ
arr.push(sumCols)
Logger.log(arr) ;
// [[1.0, 22.0, 111.0, 134.0],
// [2.0, 15.0, 125.0, 142.0],
// [3.0, 12.0, 215.0, 230.0],
// [4.0, 30.0, 230.0, 264.0],
// [10.0, 79.0, 681.0, 770.0]]
}
200 หลักล การเขขยี นโปรแกรม Google Apps Script โดย วสนลั ตต์ คณคุ ดลร กเศวต ([email protected])