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

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

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

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

JavaScript

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

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

2回答

773閲覧

typescript オブジェクトの中身に値を入れたい

cuku

総合スコア108

Vue.js

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

JavaScript

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

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

1クリップ

投稿2020/05/16 08:21

編集2020/05/16 08:41

addOffersの処理が呼ばれた時にオブジェクト値を追加しているのですが、
その時に追加するオブジェクトの値のisShowをtrueにしてあげたいです。
どうやったらいいでしょうか?
わかる人ご教授お願いしたいです。

userEntities: UserEntity[] = [] class UserEntity { userCode: string = '' userName: string = '' title: string = '' body: string = '' isShow: boolean = false constructor(user: User) { this.userCode =user.code this.userName = user.user.name this.title = user.title this.body = user.body } addOffers(users: user[]) { users.forEach((user) => { this.usersEntities = [...this.usersEntities, new UserEntity(user)] }) }

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

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

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

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

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

gentaro

2020/05/16 08:33

コードとして不完全すぎるので、まずは構文エラーが出ないコードに修正しましょう。
cuku

2020/05/16 08:41

一部だけ書いているのですが全部載せないといけないのでしょうか? 今回のは addOffers(users: user[]) { users.forEach((user) => { this.usersEntities = [...this.usersEntities, new UserEntity(user)] })
cuku

2020/05/16 08:42

上記のオブジェクトの処理が呼ばれるときに聞きたいことがあるので、必要のない箇所は書いていません
gentaro

2020/05/16 08:51

コピペでエラーが出ない程度(出るとしても質問文の問題になっている箇所ぐらい)のコードにしましょう、という意味です。 例えばclassの{を閉じてないとか、型名のUserとuserが混在して現れているとか、そのUserという型がどういうメンバーを持っているのかを提示していないとか。 基本的な構文チェックすら通らないコードを載せているようだと、そもそも提示されたコード以外にも問題があるんじゃないかという話になるので、ちゃんと最小限のエラーが出ないコードを書きましょう。
cuku

2020/05/16 09:00 編集

いや、今回のはバグで動かないから教えてくださいというエラーではないのですがww オブジェクトを展開して追加するやり方を教えて欲しいだけなので。 いちいちコメントしないで欲しいです。
guest

回答2

0

ベストアンサー

こんにちは
以下の修正でいかがでしょう?

(1) class UserEntity の constructor に省略可能な引数 isShow を追加して、this.isShow に代入

diff

1- constructor(user: User) { 2+ constructor(user: User, isShow: boolean = false) { 3 this.userCode = user.code 4 this.userName = user.name 5 this.title = user.title 6 this.body = user.body 7+ this.isShow = isShow 8 }

(2) addOffers で、追加するUserEntityをnewで作るところで、引数に true を追加

diff

1- this.usersEntities = [...this.usersEntities, new UserEntity(user)] 2+ this.usersEntities = [...this.usersEntities, new UserEntity(user, true)]

以下は上記のコードを試すサンプルです。

上記のサンプルでは、オブジェクト objusersEntitiesプロパティとaddOffersメソッドを持たせて、obj.addOffers で2つのUserを含む配列 [ userB, userC ]を渡しています。その結果、obj.usersEntities には2つの要素が追加されますが、それらの isShow は true になっていることを確認できます。

以上、参考になれば幸いです。

追記

別案を挙げます。以下のようにすれば、UserEntity のconstructorを修正せずに、addOffersのみの修正で済ませることもできます。

diff

1- this.usersEntities = [...this.usersEntities, new UserEntity(user)] 2+ this.usersEntities = [...this.usersEntities, { ...new UserEntity(user), isShow: true }]

なお、追記した別案のほうのコードだと、型エラーにはならない(と思います。)ですが、追加されるオブジェクトが、UserEntityクラスのインスタンスではなく普通のオブジェクトになってしまうので、usersEntities の要素を UserEntityクラスのインスタンスに揃えたいのであれば、回答のはじめに書いたほうのコードのほうがよいかと思います。

投稿2020/05/16 10:06

編集2020/05/17 01:11
jun68ykt

総合スコア9058

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

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

0

以下でできるかと思います。

TypeScript

1addOffers(users: user[]) { 2 users.forEach((user) => { 3 let userEntity new UserEntitiy(user) 4 userEntity.isShow = true 5 this.usersEntities = [...this.usersEntities, userEntity] 6 }) 7} 8

ただし、全体像がわからないので何とも言い難いですが、このメソッドがUserEntityのクラスに含まれている設計は違和感を覚えます。(省略されているだけで実際はそうではない?)
クラス内のメソッドで自身のインスタンスを生成しているので今回のように、どのインスタンスの変数を修正すればいいのか分からなくなってしまっているのではないですか?
また、thisで指定するのも、スコープが分かりづらく、バグを埋め込む元なので、設計をやり直した方がいいかもしれません。

投稿2020/05/16 09:21

nerianighthawk

総合スコア544

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問