はじめましてjavascript初心者です。
この場を借りてご質問させて頂きます。
例えば下記にAの処理とBの処理があります。
Aの処理が実行されない場合はBの処理を実行するようにしたいです。
まず、window.location.hrefでURLを取得します。
■A → https://teratail.com/questions/99172
Aの処理で99172を取得したい。
■B → https://teratail.com/questions/99172/*/
Bの処理で99172を取得したい。
※やりたいことはBのURL配下が一つ増えてもAと同じ値(99172)を取得したい。
ご教示の程、宜しくお願いします。
Aの処理
var aaa = window.location.href;
var bbb = aaa.split("/");
var ccc = bbb.length;
var ddd = bbb[ccc-1];
console.log(ddd);
Aの処理結果
99172
Bの処理
var aaa = window.location.href;
var bbb = aaa.split("/");
var ccc = bbb.length;
var ddd = bbb[ccc-2];
console.log(ddd);
Bの処理結果
questions
※Aの処理とBの処理をif文を使用して合体させたい。
実際に試してみたこと
var aaa = window.location.href;
var bbb = aaa.split("/");
var ccc = bbb.length;
var ddd = bbb[ccc-1];
if(aaa.indexOf("99172") > -1){
undefind;
}else{
var aaa = window.location.href;
var bbb = aaa.split("/");
var ccc = bbb.length;
var ddd = bbb[ccc-2];
}
console.log(ddd);
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+4
otn さんがおっしゃっているように条件文が謎ですが
普通に考えればこうでしょう
var aaa = window.location.href;
var bbb = aaa.split("/");
var ccc = bbb.length;
var ddd;
if (aaa.indexOf("99172") > -1)
{
ddd = bbb[ccc-1];
}
else
{
ddd = bbb[ccc-2];
}
console.log(ddd);
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+3
要件の確認
「Aの処理」と「Bの処理」で何をしたいのかを具体化した方が良いのでは、と思います。
単純に考えると、ファイルパスからファイル名やディレクトリ名を抽出するコードでしょうか。
DRY (Don't repeat yourself)
※Aの処理とBの処理をif文を使用して合体させたい。
要件から外れますが、Don't repeat yourselfの原則に従い、共通処理を関数化するとスマートなように思いました。
'use strict';
function getFilePathTokenByLastIndex (lastIndex /* [, location] */) {
var _location = arguments.length < 1 ? location : arguments[1],
tokens = _location.pathname.split('/');
return tokens[tokens.length - Number(lastIndex) - 1]
}
console.log(getFilePathTokenByLastIndex(0, {pathname: '/questions/99172'})); // "99172"
console.log(getFilePathTokenByLastIndex(1, {pathname: '/questions/99172'})); // "questions"
第二引数を省略すれば、location.pathname
からファイルパスを参照します。
質問文の追記を読んで
■A → https://teratail.com/questions/99172
Aの処理で99172を取得したい。
■B → https://teratail.com/questions/99172/*/
Bの処理で99172を取得したい。
前方からindexを辿れば、インデックス値は固定になると思います。
function getFilePathTokenByIndex (index /* [, location] */) {
return (arguments.length < 1 ? location : arguments[1]).pathname.slice(1).split('/')[Number(index)];
}
console.log(getFilePathTokenByIndex(1, {pathname: '/questions/99172'})); // "99172"
console.log(getFilePathTokenByIndex(1, {pathname: '/questions/99172/1/'})); // "99172"
"https://teratail.com/questions/99172" を保証するなら、いくつか対策はあります。
location.host
を見る/^\/questions\/(\d+)(?=$|/)/.exec(location.pathname)
でマッチさせる
Re: kimurayu さん
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
番号の位置が決まっているならきめうちで採れば良いような。
var a = 'https://teratail.com/questions/99172/*/';
var b = a.split( '/questions/' )[ 1 ].split( '/' )[ 0 ];
console.log( b );
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
-1
そもそも条件分岐を使用する自体が間違いだということでしょうか?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.23%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
otn
2017/11/05 07:48
どういう条件の時に、「Aの処理が実行されない」のですか?
haruniku
2017/11/05 16:08 編集
分かりづらくて訂正させて頂きました。
やりたいことはBのURL配下が一つ増えてもAと同じ値を取得できる処理を実行したいです。
その為には条件分岐を使用しないといけないのではないかと思い質問させて頂きました。
takito
2017/11/07 09:49 編集
条件分岐のための「決め手」(取り出したい部分についての規則、ルール)を示してください。「必ず前から3番目」とか、「数値5ケタの書式」とか、「後ろから1番目か2番目のどちらか」とか、そういった情報があればよりよい回答が得られると思います。