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

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

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

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

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

Q&A

解決済

1回答

11055閲覧

配列にpushすると全て同じ要素になる

shimokp

総合スコア7

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

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

0グッド

0クリップ

投稿2017/09/07 08:51

###前提・実現したいこと
配列に追加して出力すると全て同じ要素になってしまいます。
最終的にはjsonで出力したいです。

###該当のソースコード

javascript

1var shift = { 2 "id": null, 3 "date": null, 4 "name": null, 5 "color": null 6} 7 8var shifts = [] 9 10for(var i=0; i<30; i++) { 11 var s = shift; 12 s.id = i; 13 14 if(i<10) { 15 s.date = "2017090" + i.toString() 16 } else { 17 s.date = "201709" + i.toString() 18 } 19 20 s.name = "シフト" + parseInt(i/4).toString() 21 s.color = "cccc" + parseInt(i/4).toString() + parseInt(i/4).toString() 22 23 shifts.push(s) 24} 25 26console.log(shifts)

###出力結果

javascript

1[ { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 2 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 3 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 4 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 5 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 6 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 7 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 8 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 9 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 10 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 11 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 12 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 13 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 14 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 15 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 16 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 17 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 18 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 19 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 20 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 21 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 22 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 23 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 24 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 25 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 26 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 27 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 28 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 29 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' }, 30 { id: 29, date: '20170929', name: 'シフト7', color: 'cccc77' } ]

###試したこと
配列にpushするのではなく
new Array(30).fill(null)
しているところにインデックスでアクセスしても変わりませんでした。

###補足情報(言語/FW/ツール等のバージョンなど)
▶node -v
v8.1.3

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

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

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

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

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

guest

回答1

0

ベストアンサー

var s = shift; を
var s={};にすればよいかと。

s=shiftはsにshiftが継承されています

投稿2017/09/07 08:59

yambejp

総合スコア114777

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

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

shimokp

2017/09/07 09:05

うまく行きました。 ありがとうございます。 自分でも調べてみていたところ、オブジェクトを単純に代入すると参照渡しになることが原因だったようです。 var fuga = Object.assign({}, shift); でも行けました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問