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

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

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

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

Q&A

解決済

2回答

840閲覧

連想配列の要素の一部を書換えたいです

anzi1230

総合スコア19

JavaScript

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

0グッド

0クリップ

投稿2021/12/06 12:42

編集2021/12/27 03:24

dataで渡ってくる連想配列のclassificationの要素を
dictで定義している日本語に書換えたいです。

例)classification: "lll"←エルエルに書換えたいです
参考サイトを真似したのですが、上手くいかず
どなたかアドバイス頂けると幸いです。

参考にしたサイト:
ローマ字表記の都道府県を日本語に変換したい

javaScript

1var dict = [ 2 {lll: "エルエル", count:"2" , color:"#4474E2"}, 3 {xxx: "エックス", count: 2 , color: "#4474E2"}, 4 {sss: "エスエス", count: 2 , color: "#4474E2"} 5]; 6var data = [ 7{classification: "lll",count: 2,color: ""}, 8{classification: 'xxx', count: 1, color: ''}, 9{classification: 'sss', count: 2, color: ''} 10]; 11 12var newData = []; 13for (i=0;i<data.length;i++) { 14 var elem = data[i]; 15 console.log('elem.data',elem); 16 var newElem = Object.assign( 17 {}, 18 elem, 19 { classification: dict[elem.classification] } 20 ); 21 newData.push(newElem); 22} 23console.log(newData);

console.log結果

[{ classification: undefined, ←期待値 classification:エルエル color: "", count: 2 }, { classification: undefined, ←期待値 classification:エックス color: "", count: 1 }, { classification: undefined, ←期待値 classification:エスエス color: "", count: 2 }]

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

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

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

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

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

guest

回答2

0

ベストアンサー

ご質問にあるコードをほぼ活かすべく最低限の修正でやるならば、dictから以下のような dict2

diff

1 var dict = [ 2 { lll: "エルエル", count: 2, color: "#4474E2" }, 3 { xxx: "エックス", count: 2, color: "#4474E2" }, 4 { sss: "エスエス", count: 2, color: "#4474E2" } 5 ]; 6 7+ var dict2 = Object.assign({}, ...dict);

を作っておき、newDataの要素を作るところで、elem.classificationをキーとしてその日本語を引いてくるときのマップとしてこのdict2を使えばよいです。

diff

1var newData = []; 2for (i=0;i<data.length;i++) { 3 var elem = data[i]; 4 console.log('elem.data',elem); 5 var newElem = Object.assign( 6 {}, 7 elem, 8- { classification: dict[elem.classification] } 9+ { classification: dict2[elem.classification] } 10 ); 11 newData.push(newElem); 12} 13console.log(newData);

なお、上記によるdict2 には Object.assign({}, ...dict) によって、dictの最後の要素が持つ、countcolor も残ります。その点が気になるのであれば、

diff

1var dict2 = Object.assign({}, ...dict); 2 3+ delete dict2.count; 4+ delete dict2.color;

として、両プロパティを消せばよいでしょう。

???? サンプル @codepen

別案

map と find および分割代入を使って、こんなのでもいけますよ。

javascript

1var newData = data.map(({ classification: key, count, color }) => ({ 2 classification: dict.find(e => key in e)[key], 3 count, 4 color 5}));

???? サンプル#2 @codepen

追記

コメントからの

ちなみにdictのcolorも上書きしたかった

についてですが、つまり colorもdict の該当要素の color の値が反映されるようにしたい、ということでしょうか?
その場合、こうします。

(1) dictからdict2を作る案

???? サンプル#3 @codepen

dict2 の作り方を変えて、dict2 が以下になるようにしています。

javascript

1{ 2 lll: { 3 classification: "エルエル", 4 color: "#4474E2" 5 }, 6 xxx:{ 7 classification: "エックス", 8 color: "#000000" 9 }, 10 sss: { 11 classification: "エスエス", 12 color: "#FFFFFF" 13 } 14}

こうすることで、var newElemを作るときの Object.assign()の引数に与える3番目のオブジェクトは、dict2[elem.classification]
になります。

(2) map を使う案

map を使う方も対応させてみました。

???? サンプル#4 @codepen

なお、上記(1)、(2)のサンプルコードでは、newDataの要素のcountプロパティだけが、元の配列dataの要素のcountプロパティの値が引き継がれることを確認しやすくするため、

  • data要素のcountを、11, 22, 33 に
  • dict要素のcolorを、#4474E2, #000000, #FFFFFF に

しています。

投稿2021/12/06 13:35

編集2021/12/07 00:01
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

anzi1230

2021/12/06 19:24

ご丁寧にご回答頂き、ありがとうございます!!分割代入の方法もありがとうございます ちなみにdictのcolorも上書きしたかったのですが、(ご説明足らずすみません) { color: dict2[elem.color] },をやってみましたが、colorがundifinedになってしまいました。 この方法では難しいでしょうか?
退会済みユーザー

退会済みユーザー

2021/12/06 23:19

コメントありがとうございます。回答に追記しました。
anzi1230

2021/12/07 05:30

とても勉強になりました!!!ありがとうございましたm(__)m
guest

0

どなたかアドバイス頂けると幸いです。

dictはふつうの配列なので、番号でアクセスします。dict[elem.classification]と参照しても、ご提示のようにundefinedしか取れません。

投稿2021/12/06 12:51

maisumakun

総合スコア146018

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問