1

我在 JavaScript 中有以下代码片段

myArr = []; 
myArr.push(3); 
myArr.push(5); 
myArr.push(11); 

// console.log(myArr.length)

le = myArr.length;
for (var i=0; i < le; i++) {
     elem = myArr[i];
     // ...  e.g.
     console.log(elem)

}

LiveCode 的翻译效果如何?或者换句话说 - 我如何模拟推送元素到数组操作并询问数组的长度

注意:LiveCode 似乎只支持关联数组,我还没有找到实现数组操作的“备忘单”。

评论答案

第一个答案是马克给出的。它给出了如何做到这一点的总体思路。然后亚历克斯使代码工作。谢谢你俩。

4

2 回答 2

2

我想你正在寻找这个:

repeat for each key myKey in myArray
  put myArray[myKey] & cr after msg
end repeat

你不需要那些花哨的 JS 东西。

如果你有一个数字数组,你可以这样做:

put item 2 of the extents of myArray into myMaxKey
put "something" into myArray[myMaxKey+1]

这将模拟 JS 中的推送命令。您也可以通过不同的方式执行此操作:

on mouseUp
   put "a,b,c" into myArray
   split myArray by comma
   put the keys of myArray
   combine myArray by tab
   put tab & "d" after myArray
   split myArray by tab
   put cr & cr & the keys of myArray after msg
end mouseUp

如果要“模拟推送通知”,可以执行以下操作:

local lArray
on mouseUp
  xpush 3
  xpush 5
  xpush 7
  repeat for each key myKey in lArray
     put lArray[myKey] & cr after field 1
  end repeat
end mouseUp

on xpush theElem
   local myMaxKey
   put item 2 of the extents of lArray into myMaxKey
   put theElem into lArray[myMaxKey+1]
end xpush

请注意,lArray 在所有处理程序之外声明,而 myMaxKey 在推送处理程序内部声明,即使两者都是局部变量。

于 2013-07-18T18:42:15.960 回答
0

马克的解决方案并不完全正确;您不能使用“push”作为处理程序名称,因为“push”是 Livecode 中的保留字;在下面的代码中,我已将其更改为使用“mypush”

此外,您的版本将无法正常工作,因为您将“myArray”的声明放在“mouseup”处理程序中——这使得全局数组只能在该处理程序中访问。因此,当您在“push”处理程序中访问“myArray”时,实际上是在声明一个本地隐式声明的变量。

这是代码的一个版本,已更改以解决这两个问题,它确实(似乎)可以正常工作。

global myArray
on mouseUp
   mypush 3  
   mypush 5  
   mypush 7
   repeat for each key myKey in myArray
      put myArray[myKey] & cr after msg
   end repeat
end mouseUp

on mypush elem
   local myMaxKey
   put item 2 of the extents of myArray into myMaxKey
   put elem into myArray[myMaxKey+1]
end mypush
于 2013-07-19T22:44:45.190 回答