2016-03-16 61 views
0

我在咖啡腳本中嘗試過類似下面的內容。我期望在'objList'中填充和對象數組。它按預期運行,但在每次迭代中,它會用當前迭代中接收的對象覆蓋所有數組對象。在循環結尾,我看到所有的數組對象包含相同的值,它們對應於stringarray中的最後一個元素。如何使用循環填充咖啡腳本中的對象數組

類似的問題(與咖啡中的array.push有關)已經在stackoverflow上報告過,但沒有令人滿意的答案。似乎很多人都看到了這個問題。這是咖啡中的錯誤嗎?

strarray = [ 
     "2|file2", 
     "1|file1", 
     "0|file0", 
     "3|file3", 
     ] 
obj = {color:"", file:"", dst:""} 

objlist = for str in strarray 
    array = str.split "|" 
    obj.color = array[0] 
    obj.file = array[1] 
    obj.dst = "dst_" + obj.color 
    console.log "{color:#{obj.color}, file:#{obj.file}, dst:#{obj.dst}" 
    obj 

for o in objlist 
    console.log "objList [" 
    console.log "{color:#{o.color}, file:#{o.file}, dst:#{o.dst}," 
    console.log "]" 

輸出:

{color:2, file:file2, dst:dst_2 
{color:1, file:file1, dst:dst_1 
{color:0, file:file0, dst:dst_0 
{color:3, file:file3, dst:dst_3 

objList [ 
{color:3, file:file3, dst:dst_3, 
] 
objList [ 
{color:3, file:file3, dst:dst_3, 
] 
objList [ 
{color:3, file:file3, dst:dst_3, 
] 
objList [ 
{color:3, file:file3, dst:dst_3, 
] 

在這個別人的幫助?

回答

0

我自己找到答案。 所有objlist元素指向相同的obj(即全局對象)(java腳本通過引用分配)。對於Java /咖啡腳本的新手無法想象出來。

通過使用本地obj變量定義回調並解決此問題。