javascript - 函数参数数组,如何影响reference = []或reference.concat(array2)?

标签 javascript arrays scope selection recycle

所以可能只是我太累了,但我似乎无法弄清楚这一点。

我一直在学习 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/

相关文章:

javascript - 编写函数的不同方式会在 JavaScript 中带来不良影响吗?

javascript - google图表中的表格图表添加按钮

javascript - 在 javascript razor 中比较 2 个 json 并合并为 1 个 json

java - 比较字符串数组输出 Null

c++ - 编辑二维数组中的一系列元素?

javascript - 嵌套函数可以放在 Javascript 的全局范围内吗?

javascript - 阶乘计算的大 O(时间复杂度)是多少?

javascript - 如何从 ajax 调用异步 MVC Controller 方法

c++ - 遍历除任何 boost::multi_array 的第 d 维以外的所有维度

Javascript Scope - 包括不传递或使全局