如何使用循环

时间:2016-03-16 04:03:15

标签: object

我在咖啡脚本中尝试了类似下面的内容。我希望在' 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,
]

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

我自己找到答案。 所有objlist元素都指向同一个obj(即全局对象)(java脚本通过引用分配)。刚接触Java /咖啡脚本无法提前弄清楚。

通过使用带回调的本地obj变量定义回调解决了这个问题。