javascript - 我如何遍历队列,边走边添加和删除元素?

标签 javascript coffeescript

我希望能够遍历队列,每次都向队列中添加一些新元素,但删除我已经处理过的元素。

queue = [[0,8],[1,2],[2,4]]

for [x,y] in queue
    for i in [1,2,3]
        # Do something that results in a new coordinate..
        queue.push([newx,newy])

问题是,我不确定最好的方法是什么。

如果我在迭代时从数组中删除每个元素,它会在数组中留下一个空元素。

如果我复制数组,通过执行 queue.length = 0 将其清空,然后遍历副本,那将不起作用,因为当数组复制时,执行切片复制不起作用包含对象。

执行此操作的正确方法是什么?

最佳答案

你应该做的是修改数组的副本:

queue2 = queue.slice 0

for [x,y] in queue
  for i in [1,2,3]
    # generate newX and newY
    queue2.push([newx,newy])

queue = queue2

我不知道你说的是什么意思

that wont work because doing a slice to copy doesn't work when the array contains objects.

您可能被您在别处读到的内容误导了。使用 slice 进行数组复制非常适合对象:

coffee> queue = [[0,8],[1,2],[2,4]]
[ [ 0, 8 ], [ 1, 2 ], [ 2, 4 ] ]
coffee> queue.slice 0
[ [ 0, 8 ], [ 1, 2 ], [ 2, 4 ] ]

它不会做的是对数组存储的对象进行深度复制。但是由于您只是对 queue 进行插入和删除,所以这是完全可以接受的。

关于javascript - 我如何遍历队列,边走边添加和删除元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5956784/

相关文章:

javascript - 万事达卡付款集成如何在完成付款后重定向到链接

javascript - 表单提交预防技术不起作用

javascript - 从频谱功率电平(FFT 输出)中恢复 RMS 和/或峰值

compiler-errors - 需要普通的 Coffeescript 编辑器

javascript - Backbone : Validations being run only on set() parameters

javascript - Trello 如何访问用户的剪贴板?

javascript - 如何获得所需的自动对焦验证以在 html 表单上工作? - 我的尝试不会生效

javascript - 有效地对多个选择选项进行排序

javascript - 根据下拉列表中的选择动态初始化未保存父对象的子记录

javascript - React 未捕获错误 : Invariant Violation: _registerComponent(. ..):目标容器不是 DOM 元素