所以可能只是我太累了,但我似乎无法弄清楚这一点。
我一直在学习 JavaScript,我发现它来自 ActionScript 3,其中所有内容都是键入的,这很糟糕。我有一个直接引用两个数组变量的函数,后来我需要再次将它用于不同的数据集,因此我将其更改为接受参数,但现在它崩溃了。
我有一个充满元素的数组,第二个是空的。当我调用该函数时,会从第一个数组中删除一个随机元素并将其插入第二个数组中,该函数也返回该元素。如果第一个数组为空,我将连接第二个数组来填充它。目标是随机迭代元素,并且在完成完整循环之前不会再次显示所选元素。
在 concat 之前,我使用的是 slice(它应该也能正常工作吗?),我相信的问题是,我知道当我执行“array = array2.slice()”时,有一个重新定义的参数,而 concat 则不会。似乎无法解决这个问题。我不知道如果我期待一个字符串,从第一个数组返回单个切片元素是否不好,我认为切片返回一个包含单个元素的数组,通过在 return 语句中添加 [0] 可以轻松解决此问题.
代码如下:
//Gets a random element from array, that element is moved from the 'src' array to the 'bin' array,
//this allows random selection without choosing the same element until all of 'src' array elements have been picked
function getRandomElement(array_src,array_bin){
//Randomly selects a tweet from the que, then stores it in another array so each tweet shows once before recycling
if(array_src.length==0 && array_bin.length>0) {array_src.concat(array_bin);} //Recycles array elements when the src array is empty
var randomElement = array_src.splice(Math.floor(Math.random()*array_src.length),1); //Grab a random array element
array_bin.push(randomElement);//array elements stored here to be recycled
return randomElement;
}
我想我可以使用一个具有两个指向数组的属性的对象并将它们传递进去,尽管如果有更好的方法的话会更好。如果没有其他方法,我还可以使用 array_src 上的推送循环遍历 array_bin 来解决该问题。
我不会说这是重复的菲利克斯。您提供的答案几乎相同,但问题本身的措辞不同,我不知道术语“变异”,找到问题/答案并不容易,所提供的建议链接都不相关。值得继续关注,让那些不知道变异术语的人更容易发现答案。
最佳答案
我很难理解这个问题,但我认为您想知道为什么 array_src.concat(array_bin)
似乎没有做任何事情?
那是因为 .concat
返回一个新数组。如果你想改变现有的array_src
数组,你可以使用.push
:
array_src.push.apply(array_src, array_bin);
<小时/>
FWIW,这与强类型无关。 JavaScript(我猜还有 ActionScript)是 pass-by-value 。这意味着为 array_src
分配新值不会更改传递给 getRandomElement
的变量值。
但是由于数组在 JavaScript(我假设是 ActionScript)中是可变的,因此您可以改变数组本身。
关于javascript - 函数参数数组,如何影响reference = []或reference.concat(array2)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25430640/