Google Apps Scriptを最近勉強し始めたのですが、以下のコードが分からず、苦戦しています。
どなたか分かる方は教えて頂きたいです。
具体的には、以下のコードが全くイメージが湧かず苦戦しています。
var arr = new Array(r);
var arr2 = new Array(r);
for(var i = 0;i < r;i++){
arr[i] = new Array(c);
arr2[i] = new Array(c);
}
リンク先:http://libro.tuyano.com/index3?id=641001&page=4
=================================
※選択範囲の各セルの背景色とテキスト色を設定する
function myFunction(){
var range = SpreadsheetApp.getActiveRange();
var r = range.getNumRows();
var c = range.getNumColumns();
var arr = new Array(r);
var arr2 = new Array(r);
for(var i = 0;i < r;i++){
arr[i] = new Array(c);
arr2[i] = new Array(c);
}
Logger.log(arr);
var total = 0;
for(var i = 0;i < r;i++){
for(var j = 0;j < c;j++){
if ((i + j) % 2 == 0){
arr[i][j] = "#FF0000";
arr2[i][j] = "#FFCCCC";
} else {
arr[i][j] = "#0000FF";
arr2[i][j] = "#CCCCFF";
}
}
}
range.setFontColors(arr);
range.setBackgroundColors(arr2);
}
=================================
No.2ベストアンサー
- 回答日時:
ANo1です。
行と列のインデックスのどちらを先にするかは、作者の選択によりますが、仮に行、列の順で
ary[r][c]
として利用するものとします。
補足でご提示の3行4列の値が入っているとするなら、
1行目:ary[0]=[1, 2, 3, 4]
2行目:ary[1]=[5, 6, 7, 8]
・・・・・・・
といった感じになります。
上では、ary[r][c]と書きましたが、(ary[r])[c]のように分解して考えると解りやすいかもしれません。(かえって解りにくくなつてる?)
ご質問文でご提示のスクリプトでは、値を代入せずに、先ず、二次元の配列を必要な行・列数分用意していることになります。
誠にありがとうございます、少し理解出来てきました!
補足の文章で考えると、r =3, c = 4として、
arr = new Array[3];
arr[0] = {1, 2, 3, 4}
arr[1] = {5, 6, 7, 8}
arr[2] = {9, 10, 11, 12}
となるのですね!
(後述のため、このサイトも参考にしました。
http://hakuhin.jp/js/array.html)
for文内の
arr[i] = new Array(4);
の部分ですが、
arr[0] = new Array(4);
arr[1] = new Array(4);
arr[2] = new Array(4);
となるということは、イメージでいうと、
{1, 2, 3, 4}が代入されたarr[0]が4つの列から出来ていることを指し示しているという認識で大丈夫でしょうか。
※度々すみません、回答がない場合でもベストアンサーに選ばさせて頂きます。
No.3
- 回答日時:
ANo2です。
え~~っと・・・
javascriptの配列リテラル表記は角括弧(ブラケット)[ ]を用います。
波括弧{ }は、一般のオブジェクトのリテラル表記で、key:value形式の記述になります。
(配列は、整数インデックスをkeyとしたオブジェクトだとも言えますが…)
https://developer.mozilla.org/ja/docs/Web/JavaSc …
>{1, 2, 3, 4}が代入されたarr[0]が4つの列から出来ていることを
>指し示しているという認識で大丈夫でしょうか。
配列の値が存在する方が区別や理解がしやすいと思い、ANo2では値を用いて説明しましたが、実際のスクリプトは宣言しているだけなので、値は代入されていません。
宣言した範囲外のインデックスを与えるとエラーとなる言語が多いと思いますが、javascriptは柔軟で(柔軟すぎる?)、そのまま範囲を拡張してくれます。
その意味においては、
var arr = new Array(4);
は
var arr = new Array(); や
var arr = [];
とほとんど等価とも言えます。
(それぞれの宣言後にlength属性を見ると、違いがわかりますが…)
いろいろと簡単に試せると思いますので、ご自身で疑問点を試してみることで、理解が深まるものと思います。
例えば、
var a = new Array(3);
console.log(a); //[undefined, undefined, undefined]
a[0] = 0;
a[3] = 3;
a[5] = 5;
console.log(a); //[0, undefined, undefined, 3, undefined, 5]
あるいは、
var b = [];
b[0] = new Array(4);
b[1] = [];
console.log(b); //[Array[4], Array[0]]
console.log(b[1][10]); //undefined
console.log(b[2]); //undefined
console.log(b[2][0]); //→TypeError
※ 上記の最後の参照はエラーになります。
No.1
- 回答日時:
こんにちは
行数(r)と列数(c)分の二次元配列を設定しています。
https://developer.mozilla.org/ja/docs/Web/JavaSc …
JavaScriptにはもともと単純な配列しかありませんので、配列の各要素を配列とすることで、多次元の配列として利用しています。
例えば、2行×2列の配列なら、
ary = [
[1行1列, 1行2列],
[2行1列, 2行2列]
]
のような構造になっています。
分かり易い説明、ありがとうございます。
二次元配列の部分で苦戦しているので、参考URLも拝見させて頂きました。
追加でご質問させて頂いても宜しいでしょうか。
仮に、以下の配列を選択していた場合、
1 2 3 4
5 6 7 8
9 10 11 12
r = 3、c = 4となり、arr = new Array(3)となるかと思います。
このarrは上記例では、{1, 2, 3, 4}を指し、
その後、for文でarr[1] = new Array(4)では、
このarr[1]は上記例の{1, 5, 9}を指すという認識で良いのでしょうか。
その結果、選択した範囲の全ての二次元配列の文言が取得出来るという考えで合っていますでしょうか。
何度もすみませんが、宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript gasについて 1 2022/05/31 21:51
- JavaScript 2段階プルダウンで1段階目の選択を終えた後に選択ボックスを見えなくしたい 2 2022/07/05 21:58
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- C言語・C++・C# C言語の質問です HTMLでこのようなコードを書いたのですがそれをC言語で同じように書きたいです < 1 2022/08/11 23:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JavaScriptで簡単なクイズを作...
-
乱数を配列へ格納(JavaScript)
-
undefinedを表示させない方法は...
-
javascript 変数名の連結をしたい
-
【JavaScript】オブジェクト型...
-
順列生成アルゴリズムについて...
-
総当りの配列を返す関数の作成
-
React hooksが値を返して配列変...
-
jQueryのload()を使用して外部...
-
google apps scriptの終了のさせ方
-
C#OpenCv V4にのエラーに関する...
-
idを使わずにonclickで自身の要...
-
Linux バイナリ実行できない "...
-
JavaScript window.openで開く...
-
Javaで避けるゲームを作ってい...
-
クリックすると上に開くアコー...
-
【JavaScript】数当てゲームを...
-
C#で、ContextMenuStripに動的...
-
URLの一部をコピーできるブック...
-
ASP+アクセスでのSQLコメントに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
二次元配列を使って順位をだす...
-
C#テキストボックスの文字を配...
-
同じIDで定義した要素の配列を...
-
jspからjavascriptの変数引継ぎ
-
javascript 変数名の連結をしたい
-
React hooksが値を返して配列変...
-
undefinedを表示させない方法は...
-
javascriptで行を抽出したいです。
-
二次元配列の全要素の全要素を...
-
JavaScriptにおける[] とか :...
-
JavaScriptでの動的な多次元配...
-
順列生成アルゴリズムについて...
-
WSH(Jscript)でファイル一覧
-
JavaScriptからPHPに配列を渡す...
-
javascriptからphpに配列データ...
-
多次元配列から最大値を1行また...
-
textareaに入力されたデータを...
-
どうすればresponseText結果を...
-
オブジェクトから任意のプロパ...
-
フォーム入力値の重複チェック
おすすめ情報