前提
質問失礼いたします。
はじめての質問ですので至らないところがあると思いますが、宜しくお願い致します。
Javascriptで多次元リストを用いてあるデータを作ろうとしたところ、思いがけない所で躓いてしました。。。
実現したいこと
Javascript
1 2// 以下の2つの配列を基にして 3 4// 1. url名とtitle名をペアに持つ二次元配列 (ペア数は可変) (例 5let toSaveUrlsTitles = [ 6 ["url1", "title1"], 7 ["url2", "title2"] 8] 9// 2. すでにある何個かのデータの配列 (こちらの要素数は固定) (例 10let DataValue = ["value1", "value2"]; 11 12 13 14// urlと固定の文字列("key_")を組み合わせたキーを持つ、以下のようなオブジェクトを作りたい。 15 16// {"key_(url名)" : [(すでにある値...), "(title名)"] } (例 17NewData = { 18 "key_url1": ["value1", "value2", "title1"], 19 "key_url2": ["value1", "value2", "title2"] 20} 21
方針
for文等でurl名とtitle名のペアの二次元配列を回し、
Javascript
1{ "key_url1": ["value1", "value2"] }
というようなオブジェクトを一度作った後、
title名をpushするという方針を取りました。
得られた結果
しかし結果は
Javascript
1{ 2"key_url1": ["value1", "value2", "title1", "title2"], 3"key_url2": ["value1", "value2", "title1", "title2"] 4}
というように、titleが二つとなってしましました。
(予想されていた結果は一つのみ。"key_url1"の時は"title1"のみ、"key_url2"の時は"title2"のみ)
ソースコード
for of 文、for文、for Each文を試しましたがどれも同じような結果になりました。
共通データ
Javascript
1 2let NewData = {}; 3 4let toSaveUrlsTitles = [ 5 ["url1", "title1"], 6 ["url2", "title2"] 7] 8 9let DataValue = ["value1", "value2"]
for of
Javascript
1for (let i of toSaveUrlsTitles) { 2 let BaseKey = "key_"; 3 let WholeKey = ""; //"key_url1" 4 5 WholeKey = BaseKey; 6 WholeKey += i[0]; 7 8 NewData[WholeKey] = DataValue; 9 NewData[WholeKey].push(i[1]); 10} 11console.log(NewData); 12
for
Javascript
1for(let i=0; i<toSaveUrlsTitles.length; i++){ 2 let CurrentArr=toSaveUrlsTitles[i]; // 多重配列を分解したもの 3 4 let BaseKey = "key_"; 5 let WholeKey = ""; 6 7 WholeKey = BaseKey; 8 WholeKey += CurrentArr[0]; 9 10 NewData[WholeKey] = DataValue; 11 NewData[WholeKey].push(CurrentArr[1]); 12} 13console.log(NewData);
for Each
Javascript
1 2toSaveUrlsTitles.forEach(function (v) { 3 let BaseKey = "key_"; 4 let WholeKey = ""; 5 6 WholeKey = BaseKey; 7 WholeKey += v[0]; 8 9 NewData[WholeKey] = DataValue; 10 NewData[WholeKey].push(v[1]); 11}) 12console.log(NewData);
その他試したこと
途中途中にconsole.log()
を挟み、
for ofで言えば
Javascript
1 console.log(i[1]);
として、.push()
されるはずのものを確認しました。
そしてそこではちゃんと
Javascript
1"title1"
と出ていました。
補足情報(FW/ツールのバージョンなど)
chrome, firefoxで検証済み
はじめてですのでわかりにくい部分が多々あると思いますが、よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/11/02 02:58