🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

2回答

460閲覧

JavaScript のメソッド内に自分自身を呼び出す方法

pien

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/12/23 04:51

実現したいこと

下のように、配列aがあるとします。

let a = [1, 2]; a.push(a.length);

こうすることで配列aの要素数をa自身の末尾に記録することができます。

ここではaが変数だから簡潔にできるわけですが、仮にこれが配列そのものだったり複数のメソッドやプロパティがドットでつながれたものだった場合、置き換えるものがないと非常に長くなってしまいます。

一度lengthを別の変数に代入して、次の行でpushすることで実現はできますが、
メソッド内に直接呼び出せるような方法は一切ないのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/12/23 04:57

「一度lengthを別の変数に代入して、次の行でpushする」方法でよくない理由はなにかありますでしょうか?
yambejp

2020/12/23 05:14

インスタンスを使用しない意味がないと思います なにがどう非効率だと感じているのか、具体的なソースを書いてください
miyabi_takatsuk

2020/12/23 10:38

> 配列そのものだったり複数のメソッドやプロパティがドットでつながれたもの これはどういうことでしょうな? 具体例をソースコードで提示してください。
Zuishin

2020/12/28 11:47

何の反応もしないのはなぜですか?
Zuishin

2020/12/31 09:25

にほんごわかりますか?
Zuishin

2021/01/18 04:47

ログインしてるなら何とか言えよ。
guest

回答2

0

求めているのは with ですか?

with - JavaScript | MDN

JavaScript:with構文によるブロックスコープ再考: Architect Note

追記

with - JavaScript | MDN

with の利用は非推奨であり、ECMAScript 5 の厳格モードでは禁止されています。推奨される代替案は、参照したいプロパティを持つオブジェクトを一時変数に代入することです。

訳:
with を使わず変数を使え

つまりこの質問で求めている答え自体が、名前の格上げにより曖昧さを引き起こすため ECMAScript では非推奨で、変数を使うことが推奨されています

投稿2020/12/24 10:25

編集2020/12/24 10:34
Zuishin

総合スコア28669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

js

1const complexityArray = [ 2 ['dummy'], 3 ['dummy'], 4 [ 5 { 6 json:[ 7 { 8 id:1, 9 name:'taro', 10 hoge:{ 11 fuga:{ 12 piyo:[ 13 { 14 peso:[ 15 4, 16 6, 17 7, 18 3, 19 6, 20 3 21 ] 22 } 23 ] 24 } 25 } 26 }, 27 { 28 id:2, 29 name:'hanako', 30 } 31 ] 32 } 33 ], 34 ['dummy'] 35] 36 37const target = complexityArray[2][0].json[0].hoge.fuga.piyo[0].peso 38target.push(target.length) 39 40// または 41 42const addLength = (target) => target.push(target.length) 43addLength(complexityArray[2][0].json[0].hoge.fuga.piyo[0].peso) 44 45console.log(complexityArray) 46// > Array [Array ["dummy"], Array ["dummy"], Array [Object { json: Array [Object { id: 1, name: "taro", hoge: Object { fuga: Object { piyo: Array [Object { peso: Array [4, 6, 7, 3, 6, 3, 6, 7] }] } } }, Object { id: 2, name: "hanako" }] }], Array ["dummy"]]

一度変数に入れるか、処理を関数にして与えてあげれば何度も書く必要はなくなると思います

ただ、配列が入れ子になっているときに、破壊的・非破壊的な変更について気をつけないと、想定しない動きになってしまうことがありますのでご注意ください

投稿2020/12/24 10:07

dyekv

総合スコア128

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問