我在咖啡脚本中尝试了类似下面的内容。我希望在' 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 :(得分:0)
我自己找到答案。 所有objlist元素都指向同一个obj(即全局对象)(java脚本通过引用分配)。刚接触Java /咖啡脚本无法提前弄清楚。
通过使用带回调的本地obj变量定义回调解决了这个问题。