質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

4回答

1375閲覧

jQuery or js にてパラメータの値を配列にする。

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2018/04/26 07:29

編集2018/04/27 11:25

パスに含まれるパラメータを取得し、配列にしたいと思っています。
参考URL:https://www.jiriki.co.jp/blog/jquery/jquery-if-urlparameter

現在までに確認が取れているコード(修正前)

js

1(function () { 2 var path = location.pathname; 3 if (path == "/user") { 4 var u = location.href; 5 params = u.split("?"); 6 spparams = params[1].split("&"); 7 // console.log(spparams); 8 // ["id=1","like=1","like=2"] 9 10 } 11});

期待する動作(修正前)
like=1like=2 を1つの配列にしたいです。

like => [ 1, 2 ];

##現在までに確認が取れているコード(修正後)

js

1(function () { 2 var path = location.pathname; 3 if (path == "/user") { 4 var u = location.href; 5 params = u.split("?"); 6 spparams = params[1].split("&"); 7 8 var a = $.grep(spparams, function (elem) { 9 return elem.split("="); 10 }); 11 var b = {}; 12 a.forEach(function (x) { 13 var y = x.split("="); 14 if (typeof b[y[0]] == "undefined") b[y[0]] = []; 15 b[y[0]].push([y[1]]); 16 }); 17 console.log(b); 18 19 //yambejp様のソースコードを使用させていただいています。 20 // {id: Array(1),like: Array(2)} 21 22 } 23}); 24 25

##期待する動作(修正後)
like(key) のみで連想配列を作成したいです。
実装を進めていくうちに下記が期待する動作でした。すみません。

array:2 [▼ like => "1" like => "2" ] ※keyはlikeじゃなくても問題ありません。

ご教授よろしくお願いします。

<><<<<><><><><><><>><><><><><><><><><><><><><><>>><>><><><><><>

追記
HayatoKamono 様のおっしゃる通りでしたので新規質問を立てました。
新規質問
失礼しました。

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

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

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

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

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

m.ts10806

2018/04/26 07:54

調べたこと、自身が書いたコードを質問本文に記載してください。「期待する動作をしない」ものでも結構です。もしかしたら少し理解が違ったり、答えのすぐ前まできているかもしれません。しかしそれはコードがないと判断できませんしアドバイスもできません。
退会済みユーザー

退会済みユーザー

2018/04/26 08:53

質問内容を修正しました。よろしくお願いします。
HayatoKamono

2018/04/26 09:36

回答中に解決済みになってしまいましたが、とりあえず回答致しました。
HayatoKamono

2018/04/27 11:01 編集

解決済みの質問を後から質問内容を変えて再開するのは好ましくないと思います。この質問への既存回答全てが編集後の質問と合わなくなり無駄になります。別の新規質問にされたらいかがですか?それと入力が何で期待する出力が何なのかが分かりづらいので、そこを明確にされた方が良いと思います。また、出力はphpの連想配列の記法で表現されているため、JavaScriptの記法に変えてください。あれでは、object型で欲しいのかmap型で欲しいのかが分かりません。
guest

回答4

0

ベストアンサー

こんな感じ?

javascript

1var a= [ 2 ["apple", "1"], 3 ["apple", "2"], 4 ["banana", "3"], 5 ["banana", "4"], 6]; 7var b={}; 8a.forEach(function(x){ 9 if(typeof b[x[0]]=="undefined") b[x[0]]=[]; 10 b[x[0]].push(x[1]); 11}); 12console.log(b);

追記

javascript

1var a=["id=1","like=1","like=2"] 2var b={}; 3a.forEach(function(x){ 4 var y=x.split("="); 5 if(typeof b[y[0]]=="undefined") b[y[0]]=[]; 6 b[y[0]].push(y[1]); 7}); 8console.log(b);

投稿2018/04/26 08:51

編集2018/04/26 08:55
yambejp

総合スコア114819

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

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

退会済みユーザー

退会済みユーザー

2018/04/26 08:54 編集

ご回答ありがとうございます。 質問内容が悪いとご指摘をいただいたので修正をしました。 せっかくご回答いただいたのに申し訳ございません。
退会済みユーザー

退会済みユーザー

2018/04/26 09:02

追記すぐいただきありがとうございます。 大変助かりました。 期待する動作をしましたのでベストアンサーとさせていただきます。
guest

0

const params = ['id=1', 'like=1', 'like=2']; const project = function project(value) { return value.split('='); } const reducer = function reducer(accumulator, [key, value]) { if (accumulator.has(key)) { accumulator.get(key).push(value); } else { accumulator.set(key, [value]) } return accumulator; } const result = params.map(project).reduce(reducer, new Map()); console.log(result); // Map { 'id' => [ '1' ], 'like' => [ '1', '2' ] }

https://repl.it/repls/DistinctGenuineJavabytecode

投稿2018/04/26 09:14

HayatoKamono

総合スコア2415

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

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

退会済みユーザー

退会済みユーザー

2018/04/27 02:42

ご回答いただきありがとうございました。 勉強になりました。
guest

0

URLSearchParamsを使ってみてはどうでしょうか?
https://developer.mozilla.org/ja/docs/Web/API/URLSearchParams

JavaScript

1var search = location.search.substring(1); // like=1&like=2 2var searchParams = new URLSearchParams(search); 3var like = searchParams.getAll('like'); 4console.log(like); // ["1", "2"]

投稿2018/04/26 09:07

x_x

総合スコア13749

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

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

退会済みユーザー

退会済みユーザー

2018/04/27 02:42

なるほど。使ってみます! ありがとうございます。
guest

0

もっとうまく書ける人を待っています。

js

1var array = [ 2 ["apple", "1"], 3 ["apple", "2"], 4 ["banana", "3"], 5 ["banana", "4"], 6]; 7 8var obj = {}; 9array.map(function(childArray){ 10 var key = childArray[0]; 11 var val = childArray[1]; 12 !obj[key]?obj[key]=[val]:obj[key].push(val); 13}); 14 15console.log(obj["apple"]); 16console.log(obj["banana"]); 17 18

投稿2018/04/26 08:29

namimon

総合スコア726

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

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

退会済みユーザー

退会済みユーザー

2018/04/26 08:51

すみません、ご回答いただきありがとうございます。 質問内容が悪かったので質問内容を修正させていただきました。 ご回答いただいたのに申し訳ございませんでした。
yambejp

2018/04/26 09:03

質問内容を変えるときは元の文書を残しつつ 追記したほうがよいでしょう。 回答の整合性がとれないので・・・ 新たな命題についても回答を追記しておきました
退会済みユーザー

退会済みユーザー

2018/04/26 09:05

おっしゃる通りでした。 namimon様、申し訳ございません。 今後は元の回答も残すようにいたします。
namimon

2018/04/26 09:18

解決したなら、よかったです>akari_2487さん
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問