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

Function param array, how to affect reference = [] or reference.concat(array2)?

本文关键字:reference array2 concat 影响 数组 参数 何影响 函数      更新时间:2023-09-26

所以它可能只是我很累,但我似乎无法解决这个问题。

我一直在拿起javascript,我发现可怕的来自actionscript 3,一切都是键入。我有一个直接引用两个数组变量的函数,后来我需要在不同的数据集上再次使用它,所以我把它修改为接受参数,现在它坏了。

我有一个充满元素的数组,第二个是空的。当我调用函数时,从第一个数组中删除一个随机元素并推入第二个数组,该元素也由函数返回。如果第一个数组是空的,我就连接第二个数组把它填满。我的目标是随机遍历元素,并且在完成一个完整的循环之前不让选中的元素再次出现。

在concat之前,我正在使用slice(应该同样有效?),我相信的问题是,我知道有一个参数,当我做'array = array2.slice()'时被重新定义,concat似乎不能解决这个问题。我不知道是否从第一个数组返回单个切片元素是坏的,如果我期待一个字符串,我认为切片是返回一个数组与单个元素,很容易修复那里,虽然通过添加[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上使用push来循环array_bin来解决这个问题。

我不会说这是Felix的复制品。你提供的答案几乎是一样的,但问题本身的措辞不同,我不知道这个术语突变,找到问题/答案并不容易,SO提供的建议链接都不相关。为了让那些不知道这个变异词的人更容易发现答案,值得继续下去。

我很难理解这个问题,但我认为你想知道为什么array_src.concat(array_bin)似乎没有做任何事情?

这是因为.concat 返回一个新的数组。如果想改变现有的array_src数组,可以使用.push:

array_src.push.apply(array_src, array_bin);

一般说来,这与强类型无关。JavaScript(我猜ActionScript也是),是按值传递。这意味着给array_src赋一个新值不会改变传递给getRandomElement的变量的值。

但是由于数组在JavaScript(和ActionScript我假设)中是可变的,你可以改变数组本身