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

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

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

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

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

Q&A

解決済

1回答

6472閲覧

複数の連想配列に新しいキーを追加したい

tarako328

総合スコア3

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

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

0グッド

0クリップ

投稿2020/04/26 08:22

Javascriptで、下記のような複数の連想配列があるとします。

const hoge = [
{name: fish, age: 32},
{name: bear, age:10},
{name: rabbit, age: 22}
]

この一つ一つのオブジェクトに新たに、bloodtype: というキーを追加し、以下のような連想配列を作りたいのですが、良い方法はありますでしょうか。

const hoge = [
{name: fish, age: 32, bloodtype: A},
{name: bear, age:10, bloodtype: B},
{name: rabbit, age: 22, bloodtype: AB}
]

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは
bloodtype の値がどのように与えられるのかにもよりますが、たとえばhoge と長さが同じで、要素が血液型を表す文字列の

javascript

1const bloodtypes = ["A", "B", "AB"];

という配列で与えられるものとすれば、以下の hoge

javascript

1const hoge = [ 2 { name: "fish", age: 32 }, 3 { name: "bear", age: 10 }, 4 { name: "rabbit", age: 22 } 5];

の各要素に、bloodtype を追加したオブジェクトを要素とする配列 hoge2 は、以下のようにして得られます。

javascript

1const hoge2 = hoge.map((e, i) => ({ ...e, bloodtype: bloodtypes[i] }));

上記は、hoge の要素に直接 bloodtypeを追加するのではなく、hogeの要素のコピーとなる新たなオブジェクトを作ってbloodtypeを追加し、それを hoge2 の要素にしています。

hogeの要素に bloodtype を追加してよいのでしたら以下です。

javascript

1hoge.forEach((e, i) => { 2 e.bloodtype = bloodtypes[i]; 3});

各要素の血液型の与えられ方が、冒頭のようなものではない場合はコメントいただくか、ご質問に追記いただければと思います。

投稿2020/04/26 08:47

jun68ykt

総合スコア9058

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

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

tarako328

2020/04/26 09:17 編集

ご回答ありがとうございます。 とてもわかりやすく助かりました、、! ややこしくて大変申し訳ないのですが、上記の連想配列はそのままで、blootypesの値をcheckedに変え(値の部分はBoolean値)、defaultがfalseの場合でしたらどうなりますでしょうか?
jun68ykt

2020/04/26 09:39 編集

コメントありがとうございます。 checked が以下のような配列で与えられたとします。 const checked = [true, ,false]; すなわち長さは3 ですが、2番目の要素がない場合です。このとき checked[1] は true でも false でもなく undefiend ですが、hoge の要素にcheckedを追加するときに、 checked配列の値としてはundefined である2番目のオブジェクトには、checked プロパティとして false を入れるには、以下のようにします。 const hoge2 = hoge.map((e, i) => ({ ...e, checked: checked[i] || false })); 動作確認用サンプル: https://codepen.io/jun68ykt/pen/qBOmRbW?editors=0012 上記のコードで、 "|| false"  によって、デフォルトが false になります。
jun68ykt

2020/04/26 09:44

または以下でもよいです。 const hoge2 = hoge.map((e, i) => ({ ...e, checked: Boolean(checked[i]) })); 動作確認用サンプル:https://codepen.io/jun68ykt/pen/YzyVNxG?editors=0012 上記は以下を使っています。 Boolean(true) : true Boolean(false) : false Boolean(undefined) : false
AkitoshiManabe

2020/04/26 10:32

コメントでの追加の命題は3値を2値にすると情報喪失しちゃう点を考慮すべきですね。 本題のとおり、bloodtype の「値」を持たせたい場合、複数候補から択一となるラジオボタン/セレクトメニューを使うべき事例に感じました。 (JavaScriptの質問とは異なるため、コメント欄で失礼します)
tarako328

2020/04/26 15:38

ご回答くださった方、ありがとうございました。 大変わかりやすかったです!うまく実装できました。
jun68ykt

2020/04/27 03:50

@AkitoshiManabeさん コメントありがとうございます。 > 3値を2値にすると情報喪失しちゃう点を考慮すべきですね。 そうですね。明確に異なる3値で管理しなければならない変数があったときに、それに入る値として true, false, undefined を、異なる3値とみなしてどうにかやり通そうとして、上手くいけばそれは結果オーライではありますが、ちょっと気を抜くと、false のときとundefined のときを同じ場合として扱ってしまうコードをうっかり書いてしまっていて、不可解な挙動をするUIになってしまい、憂鬱なデバッグをする羽目になることは、ままありますね。 > ラジオボタン/セレクトメニューを使うべき事例に感じました。 あー、そういう感じしますね。 質問者さんには、false と undefined をうまく区別をつけて切り抜けてほしいです。
jun68ykt

2020/04/27 03:51

@ tarako328さん どういたしまして???? > うまく実装できました。 とのことでよかったです????
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問