javascript
1var array = ['い','ろ','は','に','ほ'] 2var a = { 3 cache: { 4 index: '', 5 value: '' 6 } 7} 8var b = [] 9 10array.forEach(function(value, index) { 11 a.cache.index = index 12 a.cache.value = value 13 b.push(a.cache) 14}) 15 16console.log(b)
としたところ出力は
[ { index: 4, value: 'ほ' }, { index: 4, value: 'ほ' }, { index: 4, value: 'ほ' }, { index: 4, value: 'ほ' }, { index: 4, value: 'ほ' } ]
となってしまいました。
これはb.pushした内容(a.cache)がオブジェクト、つまりbにはa.cacheの参照先がbにpushされていて、for文内でa.cacheが最後に書き換えられた内容(index: 4, value: 5)が出力されたという認識でよろしいでしょうか?
加えてなのですが(これが本題です)、出力結果を
[ { index: 0, value: 'い' }, { index: 1, value: 'ろ' }, { index: 2, value: 'は' }, { index: 3, value: 'に' }, { index: 4, value: 'ほ' } ]
とするためにはどのような方法がありますでしょうか?
(cacheという一事保存をする変数を使った形でお願い致します)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/01 14:53
2017/05/01 15:42 編集
2017/05/01 15:40