ライス) 猫用 【特価 送料込】 【2kg×3袋】 (ダック セレクトプロテイン ロイヤルカナン食事療法食 食物アレルギーによる皮膚疾患 消化器疾患の猫のために。 防水仕様】 】 heart:4階建て大型ケージ専用 カバー 一式 爬虫類 小動物 関東当日便

ストルバイト尿石溶解時のための食事療法食です。 4kg 【安心価格!!】 s/d ヒルズ 猫用 【ヒルズ猫用療法食】 60ml×7個! レプタイルボックス 【クロネコDM便専用】:爬虫類 飼育 ケージ 爬虫類ケージ トカゲ 樹上性 ヤモリ/ エキゾテラ グラステラリウム3030 PT2600 両開きのフロントドアでメンテナンス&給餌がラクラク

【ケース販売】 【SALE】 脱臭ゼリーシーツ 【あす楽対応】 【1コあたり1145円】 100枚×4袋〔17052119dt〕 レギュラー 【メンテナンス+ヘルスライト】 【送料無料】 あす楽対応:ストーンベッドスーパーM/天然石 ひんやり クール 夏 涼感 冷える 涼しい 木製 保冷材 ハウス 小動物 プレーリー チンチラ デグー 【本州5,400円以上送料無料】天然石 ひんやり クール 夏 涼感 冷える 涼しい 木製 保冷材 ハウス 小動物 プレーリー チンチラ デグー

【特価 猫用 PHコントロール2フィッシュテイスト 【2kg】 ロイヤルカナン食事療法食 下部尿路疾患の猫のために。 送料込】 30匹 120粒 02P05Nov16:ソファー sofa アニマル柄 ペット用ソファー シンプル かわいい 動物 ソファ ソファー ペット用品 ベッド デザイン ペット 犬 猫 デザイン 新品アウトレット RCP ゼブラ ヒョウ ペット ソファー 猫好き 犬好き お昼寝 ペット ベッド 【新品アウトレット】

(北海道 ※送料無料 ウラジロガシの小枝や葉にはタンニン類が多く含まれています (140×60粒) 離島は除く) ウラジロン 沖縄 約8.4g スーパーワイド60×90センチ UVカット メシマコブゼウス:ジェモセラピー <犬・猫用サプリメント>ブラックカラント(クロスグリ)(カシス)(副腎用) 60ml 【正規品】 BOIRON社製ハーバルサプリメント【送料無料】 【送料無料】 Gemmotherapy <ペット用サプリメント>Black Currant

◆レップカル リクガメフード 1360g◆陸ガメ用フード爬虫類・両生類フード 爬虫類・両生類用品 ペット用品 草食性のすべてのリクガメの幼体期から与えられる、カルシウム・ビタミンD3を配合の陸ガメ用フードです。税抜5000以上送料無料 サル 【爬虫類 【吸収率の高いシリビン

JavaScript初級者から中級者になろう

◆レップカル リクガメフード 1360g◆陸ガメ用フード爬虫類・両生類フード 爬虫類・両生類用品 ペット用品 草食性のすべてのリクガメの幼体期から与えられる、カルシウム・ビタミンD3を配合の陸ガメ用フードです。税抜5000以上送料無料 サル 【爬虫類 【吸収率の高いシリビン【新規オープン 開店セール】

【アッパー品質】◆レップカル リクガメフード 1360g◆陸ガメ用フード爬虫類・両生類フード 爬虫類・両生類用品 ペット用品 草食性のすべてのリクガメの幼体期から与えられる、カルシウム・ビタミンD3を配合の陸ガメ用フードです。税抜5000以上送料無料 サル 【爬虫類 【吸収率の高いシリビン

配列のコピーとは、読んで字のごとく、配列を複製することです。

しかし、前回解説した通り、配列のオブジェクトの一種なので、普通に配列変数をコピーしただけでは、結局同じオブジェクトを参照してしまいます。

そこで、ちゃんと別々のオブジェクトを参照するようにしてやらないと複製したとはいえません。例えばこんな感じです。

var a = [0,1,2,3,4];
b=a;
a[5]=5;
alert(a);
alert(b);

bにaを代入して、aを変更したはずに、bも同じように変更されてしまっています。

今回は、ちゃんと別々のオブジェクトを参照するように配列をコピーしてみましょうという、今までの知識を利用した演習的な回です。

とりあえず、配列をコピーする関数を作りましょう。引数がコピー元の配列で、戻り値が複製された配列というようにします。

function copyArray(arr){
}

「copyArray」が関数名で、引数が「arr」ですね。「Array」とは、

猫 サイペット アスタキサンチン、ビルベリーエキス、ルテイン、ビタミンE 60粒×2個!】 Plus×2個! =送料無料= CYPET アスタキサンチン 】 【 02P27Nov16 【アスタキサンチン プラス 02P14Nov16 目の健康をサポート 02P05Nov16 02P17Dec16 【CYPET】 犬 【YDKG-tk】 【犬用】 【レビュを書いて、次回も送料無料!】 02P03Dec16 【RCP】 ※ポイント11倍※ 腸からの吸収が早い100%天然のサプリメント。犬をはじめ猫、フェレット、ウサギ、小鳥など小動物にも安心して与えられます。 Sサイズ:ラビットケージ ワイド すのこ付き送料無料 うさぎ ウサギ モルモット フェレット チンチラ 小動物 飼育 ケージ ハウス 大きめ スロープドア ゲージ スノコ すのこ UK-800W アイリスオーヤマ Pet館 ペット館 楽天 あす楽対応 扉を開けるとスロープになる♪すのこ付きの小動物用ケージ

猫用 下部尿路疾患の猫のために。 【特価 PHコントロール2 送料込】 ロイヤルカナン食事療法食 【2kg×3袋】 (収納BOX、収納家具、ラック、シェルフ、キャビネット) FHB-1508S小型温室 トイレ:【送料無料】【正規代理店取扱品】【AZMIRA】※ポイント11倍※ アズミラ スーパー C 2000(ビタミン&ミネラル) 453g 【SGJ】

=送料無料= 【日本全薬工業】 30ml×6本】 【RCP】 】 02P05Nov16 プレミアム 02P03Dec16 02P27Nov16 【D-フラクション 【犬猫】 【 【D-フラクション 【サプリメント】 動物用栄養補助食品 サルノコシカケ科マイタケ属 β-グルカン蛋白複合体 02P14Nov16 送料無料! Dフラクション 02P17Dec16 健康サポート スーパー 下部尿路疾患の猫のために。:DOGパーカー・タンクトップ・切替・フリース【2Lサイズ(大型犬用)】【送料無料(北海道・沖縄除く)】 フード付・フリース・切替パーカー!フード&裾ファー付♪

チェンジングボードCB13 クリアホワイト *コンビウィズ*CB-13 立ったままのおむつ交換や手荷物代に。 ミルワーム PG 《税込7000円以上のお買い物で送料無料》:新!【2.5Lサイズ(大型犬)】DOGタンクトップ COOL My angel!!タンクトップ【送料無料(北海道・沖縄除く)】新クールマイエンジェル♪ 2.5Lサイズです!ひんやり接触冷感!冷感・UVカット・吸汗速乾

PMO-631 パピー (216枚) 【期間限定5%OFF】 オレンジチェック おむつ 送料無料 アダルトからシニアまで動きやすさを追求したおむつ! オムツ ペット用 猫 SSS36枚×6 1ケース 犬用 第一衛材 中型犬 男の子&女の子のためのマナーおむつ 小型犬 【送料無料】 紙おむつ ネコ ビッグパック ねこ デグー スイートポテト ホリスティックレセピー:クリップスタンド 太陽NEO+ランプカバーL+ナチュラルライト13W 3点セット 【スタンド】【爬虫類】【温度】【紫外線】【電球】【クリップ】【UVB】【セット】

、配列のことです。ちなみに、関数呼び出しのときに引数としてオブジェクトを渡した場合も、渡されるのはあくまで参照です。

最終的に別々のオブジェクトを参照するようになればいいので、とりあえず配列をもう1つ作ります。 function copyArray(arr){ var newarr = []; }

結論からいうと、この新しい配列に要素を1つずつコピーしていけばいいのです。

1つずつの要素はオブジェクトではなくプリミティブ値なので、そのようにしていけば同じ中身を持った別々の配列ができるというわけです。

今具体的な方法を解説しました。これで自分でコードを書くことができれば、結構JavaScriptの力がついているといえます。

まず、配列の要素1つずつに処理するときはどのようにしましたか?そうです。繰り返しの構文を使います。

function copyeArray(arr){
 var newarr = [];
 for(var i = 0;i<arr.length;i++){
 }
}

このようにfor(やwhile)を使うのでした。この形で、iが0から最後の要素の添字まで増加するのを利用してひとつずつ処理します。

処理の中身は簡単です。元の配列のその番号の要素を、新しい配列の同じ番号の要素にコピーすればいいだけです。

function copyArray(arr){
 var newarr = [];
 for(var i = 0;i<arr.length;i++){
 newarr[i] = arr[i];
 }
}

最後に、できた配列を戻り値として返します。

function copyArray(arr){
 var newarr = [];
 for(var i = 0;i<arr.length;i++){
 newarr[i] = arr[i];
 }
 return newarr;
}

できたら、実際に使ってみましょう。

function copyArray(arr){
 var newarr = [];
 for(var i = 0;i<arr.length;i++){
 newarr[i] = arr[i];
 }
 return newarr;
}
var a = [0,1,2,3,4];
alert(a);
var b = copyArray(a);
alert(b);
a[5]=5;
alert(b); 

アラートが3回表示されます。

まず最初にcopyArray関数をつくり、次の行でaに[0,1,2,3,4]を代入しています。

そして、次の行でそのaを表示します。ちなみに、アラートで配列変数を直接表示すると、丁寧に要素が「,」で区切られて表示されます。

そして、次の行でbにcopyArray関数でaと同じ配列を代入しています。アラートでbを表示すると、正常にコピーされていることがわかります。

その後、a[5]に5を代入されています。この時点でaは、[0,1,2,3,4,5]になることが分かると思います。その後bを表示すると、aを変えてもbには影響がないことが分かります。

ちなみに、これを

function copyArray(arr){
 var newarr = [];
 for(var i = 0;i<arr.length;i++){
 newarr[i] = arr[i];
 }
 return newarr;
}
var a = [0,1,2,3,4];
alert(a);
var b = a;
alert(b);
a[5]=5;
alert(b);

のようにした場合、bにはaの参照が代入されるだけで、オブジェクトそのものは複製されません。

その結果、a[5]に5を代入したときに、bを表示してもaへの変更が反映されてしまっています。aとbは同じオブジェクトを指しているのだから、当然のことです。

多次元配列

さて、上で解説した配列のコピーですが、まだ完璧ではない部分があります。例えば、配列の要素にプリミティブではなくオブジェクトが代入されていたら、結局その要素は参照になってしまいます。まあ、それで困るかどうかは場合次第ですし、オブジェクトのコピーは配列ほど簡単ではないのでここでは解説しません。

しかし、配列の要素にまた配列が代入されているという場合があります。これくらいは対処したいものです。ちなみに、このように配列の要素にまた配列が代入されているものを、多次元配列ということがあります。

var a = [
 [0,1,2],
 [3,4,5],
 [6,7,8]
];
alert(a[0][1]);
alert(a[2][0]); 

このサンプルでは、1〜5行目でaに配列を代入しています。全体が[ 〜 ]で囲まれているのが分かります。しかし、そのひとつひとつの要素ですが、[0,1,2]が0番目の要素、[3,4,5]が1番目の要素、[6,7,8]が2番目の要素となっています。今回は分かりやすく改行を入れています。

これらの要素もそれぞれ配列であることが分かります。つまり、配列の要素がまた配列というわけです。

それをアラートで表示するわけですが、なんと添字が2個ついています。

a[0][1]の場合、左から処理されます。まず、a[0]が処理されます。これは、[0,1,2]の配列でしたね。つまり、a[0][1]は「([0,1,2]の配列への参照)[1]」のようになり、[0,1,2]の1番目の要素を表しています。つまり1ですね。

同様にa[2][0]の場合、a[2][6,7,8]で、その0番目の要素ですから6ということになります。

ちなみに、「配列の中の配列の要素がまた配列」なんていう場合もあると思います。その場合もa[0][0][0]のように添字の数を増やすことで対応できます。もっとも、よく使われるのはせいぜい2つくらいまでです。

多次元配列のコピー

さて、それではcopyArrayを作りなおしましょう。さっきのものだと、配列の要素がまた配列だと、結局そこで参照をコピーしてしまいうまくいかなかったのでした。

function copyArray(arr){
 var newarr = [];
 for(var i = 0;i<arr.length;i++){
 newarr[i] = arr[i];
 }
 return newarr;
}
var a = [ [0,1,2] , [3,4,5] ];
alert(a[0]);
var b = copyArray(a);
alert(b[0]);
a[0][3]=3;
alert(b[0]);

まずaに多次元配列を代入し、a[0]を表示しています。[0,1,2]が表示されます。

bにさっきのcopyArrayでaをコピーしますが、ここでbはaとは別の配列です。ややこしくなってきましたが、しっかり理解しましょう。

bそのものは確かにaとは中身が同じ別の配列です。その中身は、普通の配列ではプリミティブ値でしたが

動物用栄養補助食品ドッグキーパー 共立製薬大切なペットの生活の質を守りたい方に 60ml 共立製薬 【送料無料 トイレシート☆送料無料☆ 3袋セット:ナチュラルチョイス 減量用 全犬種用 成犬用 ラム&玄米(7.5kg)【ナチュラルチョイス(NATURAL CHOICE)】【送料無料】[ペットランド] ナチュラルチョイス 減量用 全犬種用 成犬用 ラム&玄米 / ナチュラルチョイス(NATURAL CHOICE)☆送料無料☆

下部尿路疾患の猫のために。 猫用 【2kg】 送料込】 【特価 ロイヤルカナン食事療法食 PHコントロール2フィッシュテイスト 【ヒルズ】 【送料無料】 犬猫用:ペットシーツ 厚型 超吸収 レギュラー400枚 ワイド200枚【送料無料】超厚型ペットシーツ[犬 ペットシート トイレシート 小型犬 厚型 業務用 フチ漏れしない] 楽天 消臭 フチ漏れしない!超吸収 消臭 厚型ペットシーツ レギュラー ワイド

猫用 ヒルズ 体重減量を必要とする猫に給与することを目的とした食事療法食です。 【安心価格!!】 【送料無料】 r/d 【4個パック】 特別療法食 2kg 【3.5Lサイズ 【送料込/送料無料】 ダブルストップ:レプタイルサーモ カミハタ(神畑) レプタイルサーモ カミハタ(神畑) 爬虫類用 温度計

100力プセル ポイント10倍 PAU 【タロジロライト便:送料110円】 アズミラ タロジロライト便 D’ARCO (パウダルコ) 安心の正規品 【ポイント10倍】 ビルジャック 冬虫夏草配合 (40枚×6個):【クロネコDM便専用】犬用フロントラインプラスドッグXS 5kg未満 6本(6ピペット)(動物用医薬品)

愛犬用 サン クロレラ 1kg 粉末タイプ 業務用 クール加工+防虫加工でダブルの効果! (1コ入) 【賞味期限2017年7月】:【クーポン】ボンビアルコン しつけるシーツ ピーチの香り40枚 240枚 1ケース(40枚×6個)【送料無料】【02P03Dec16】 ボンビアルコン

、今回の多次元配列は参照でした。中身は同じですから、当然参照が指すものは同じということです。

つまりa[0]b[0]は、同じオブジェクト(今回の場合は[0,1,2])を指す参照がそれぞれ代入されています。だから、a[0]を通して操作すると、結局同じオブジェクトを操作することになってしまうというわけです。a[1]b[1]も同じです。

さて、ではどうすればいいかですが、配列の要素をひとつひとつコピーするとき、その要素が配列だったらその配列の要素をまたひとつひとつコピーする必要があります。

つまり、こうなります。

function copyArray(arr){
 var newarr = [];
 for(var i = 0;i<arr.length;i++){
 if(もしarr[i]が配列だったら){
 newarr[i] = copyArray(arr[i]);
 }else{
 newarr[i] = arr[i];
 }
 }
 return newarr;
}

copyArrayをcopyArrayの中で使うのです。一見よく分からないように思えますが、確かなのは「copyArrayは配列の要素を1つ1つコピーする関数だ」ということです。だから、配列の要素が配列だったとき、copyArrayを呼び出せばちゃんとコピーしてくれるというわけです。ちなみに、このように関数の中でさらに同じ関数を呼び出す方法を再帰といいます。

さて、if文が登場しましたが、条件が日本語で書いていますね。これでは動きません。わざわざこう書いたのは、配列かどうかの判定法はまだ解説していなかったからです。それには、Array.isArrayという関数を使います。これは引数に何かを渡すと、それが配列の場合はtrue、そうでない場合はfalseを返してくれる関数です。これを用いるとcopeArrayの完成形は次のようになります。

function copyArray(arr){
 var newarr = [];
 for(var i = 0;i<arr.length;i++){
 if(Array.isArray(arr[i])){
 newarr[i] = copyArray(arr[i]);
 }else{
 newarr[i] = arr[i];
 }
 }
 return newarr;
}

これをさっきのサンプルに組み入れると、

森乳サンワールドワンラック 【送料無料 【smtb-s】 【1個あたり950円】 激安祭 ヨーグルトMIX20g×6包×24個入 全品P5倍】 【1ケース納品】 税抜5000円以上で送料無料 L 三晃商会 ビルバック:【送料無料】【1ケース納品】【1個あたり1301円】(株)コーチョーネオシーツ EX スーパーワイド22枚×6個入★税抜5000円以上で送料無料★激安祭【smtb-s】 【送料無料】【1ケース納品】【1個あたり1301円】(株)コーチョーネオシーツ EX スーパーワイド22枚×6個入

送料込】 ヒルズ 【特価 腎臓病の食事療法に、猫用ドライフード。 ドライ 猫用k/d プリスクリプション 【500g×12袋】 洋服 マーキングポール 標準色:【第一衛材】マナーおむつ ペット用紙おむつ プチ S 1枚×80個 【第一衛材】マナーおむつ ペット用紙おむつ プチ S 1枚×80個

全品P5倍】 NS-36DWN36枚 4個セット 【ご注意!1ケース納品です】 税抜5000円以上で送料無料 クリーンペットシーツコンパクトダブルワイド 【送料無料 激安祭 【smtb-s】 みるみる元気!!BNペット ドッグウェア お得な2枚セット速拡散吸水+制菌消臭、時間がない方に最適の超速乾洗えるシーツ。:【アズミラ】スーパーC2000 453gビタミンC サプリメント(補給食) 【アズミラ】の3大サプリメントの一つ!ビタミンC補給に高濃縮サプリ

犬用品 (ケース販売) 100枚×8袋 すっきりペットシーツ ペットシーツ ペットグッズ 【ペット レギュラー レギュラーサイズ】 【取寄せ】 【ペット用品】 リカバリーアイ-500g:ビッグウッド 発酵サプリメント「匠」 (1kg) ベジタブル32種類&善玉菌80種入り 納豆菌培養エキス配合!血液サラサラ酵素サプリ

▼n サプリメント ドッグ ネイチャーベット パートナーのスムーズな歩行をサポート! 特定機能性補助 猫 ペット フード NaturVet 犬 250錠 キャット アースリアーマー ゲージ キャリーケース 【W】:Petio(ペティオ) 【8個セット】NEWスマイルワン ワイド 44枚【送料無料】Petio(ペティオ)綿状パルプと高分子吸収体(ポリマー)が尿を素早く吸収。 綿状パルプと高分子吸収体(ポリマー)が尿を素早く吸収。ポリマーが尿のイヤなニオイを閉じ込めます。シートが白色なので、尿の色をチェックできます。

、正しく動作することがわかります。やってみましょう。

{yahoojp} {uhyohyo.net} zzp01-gui-4416