Javascript 如何更新从函数返回的变量?

Javascript 如何更新从函数返回的变量?,javascript,arrays,function,if-statement,Javascript,Arrays,Function,If Statement,我一直在尝试写一个返回函数。这个函数将要做的是,它将存储最后两个已经生成的ID号,并在有新ID号时追加,删除第一个ID号 我有这个功能,它可以创建ID并播放带有该ID的视频 function newVideo(){ let rando = Math.floor((Math.random() * 3970) + 1); document.getElementById("vsrc").src = "https://raw.githubusercontent.com/ondersumer07/

我一直在尝试写一个返回函数。这个函数将要做的是,它将存储最后两个已经生成的ID号,并在有新ID号时追加,删除第一个ID号

我有这个功能,它可以创建ID并播放带有该ID的视频

function newVideo(){
  let rando = Math.floor((Math.random() * 3970) + 1);
  document.getElementById("vsrc").src = "https://raw.githubusercontent.com/ondersumer07/vinematik-videos/master/vid/" + rando +  ".mp4";
  document.getElementById("videoEl").load();
  return rando;
}
我返回
rando
以在函数外部使用它,并且我可以在函数外部访问它,问题是,函数外部的变量不是每次
newVideo()
运行时都更新

其代码如下所示:

let rando = newVideo();
let vidids = [];

if (vidids.length < 2) {
  vidids.push(rando)
  console.log("added")
} else {
  vidids.shift()
  console.log("deleted")
};
function prevVideo() {
  document.getElementById("vsrc").src = srcRaw + videoids.last() + ".mp4";
  document.getElementById("videoEl").load();
  videoids.push(videoids.last());
}
让rando=newVideo();
设vidids=[];
如果(vidids.length<2){
视频推送(随机)
控制台日志(“添加”)
}否则{
vidids.shift()
控制台日志(“已删除”)
};
基本上,这是为了获取返回的
rando
值并将其推送到
vidids
数组中,如果有两个以上的值,则删除第一个值,但不会更新
let vidids=[]数组。我需要它在每次运行
newVideo()
函数时进行更新

另外,如果数组中的项目少于两个,我希望if添加该项目,如果数组中的项目多于两个,则从数组的开头删除该项目。我不确定这是否也行

我似乎不知道如何做到这一点,我是做错了还是这个功能还有希望?我该怎么写那个函数呢


编辑:我已经更改了
vidids.length
部分,但问题仍然存在,因为
let rando=newVideo()不更新。

为了保留数组的最后两项,您可以使用如下内容

let vidids = [];

function addToArray(item, array){

    array.unshift(item);
    return array.slice(0,1);

}



//test
    vidids = addToArray(newVideo(), vidids);
    vidids =addToArray(newVideo(), vidids);
    vidids =addToArray(newVideo(), vidids);
    vidids =addToArray(newVideo(), vidids);
    vidids =addToArray(newVideo(), vidids);
    console.log('Done');
您犯了一个小错误,导致代码无法正常工作。 IF条件用于检查“VidID”阵列的长度, 实际上,它比较的是数组引用,而不是数组的长度

要解决此问题,请在IF条件中的“vidids”后面添加.length

....
if (vidids.length < 2) {
.....
。。。。
如果(vidids.length<2){
.....

我找到了答案。基本上,我所做的是存储算法创建的每个数字,然后在最后一个之前取一个

是这样的:

let rando = newVideo();
let vidids = [];

if (vidids.length < 2) {
  vidids.push(rando)
  console.log("added")
} else {
  vidids.shift()
  console.log("deleted")
};
function prevVideo() {
  document.getElementById("vsrc").src = srcRaw + videoids.last() + ".mp4";
  document.getElementById("videoEl").load();
  videoids.push(videoids.last());
}
创建随机数的算法:

  function randomNum() {
  let rando = Math.floor((Math.random() * 3970) + 1);
  return rando;
};
然后我把这个函数放在一个变量中:

let videoid = randomNum()
我有另一个名为
videoids
的变量,它位于randomNum函数的之上和之外,是一个数组:

let videoids = []
之后,我将我用
videoid
创建的每个数字都存储在
videoid
中,方法是按下它(这个按钮需要在您的函数中):

好的,我用这种方式存储了所有的数字。现在我应该在最后一个之前取一个,这样我可以转到上一个视频。所以我需要创建一个函数,我使用了这个函数,它是由,在

现在,我可以将其放在我的
prevVideo
函数中,该函数如下所示:

let rando = newVideo();
let vidids = [];

if (vidids.length < 2) {
  vidids.push(rando)
  console.log("added")
} else {
  vidids.shift()
  console.log("deleted")
};
function prevVideo() {
  document.getElementById("vsrc").src = srcRaw + videoids.last() + ".mp4";
  document.getElementById("videoEl").load();
  videoids.push(videoids.last());
}

注意:不要忘记将
videoid.last
放入
videoid
中,否则您只能返回上一个号码一次。

您有输入错误。它应该是
if(vidid.length<2)
当您检查数组长度时,谢谢。我错过了这一个,但仍然不能解决数组不更新的问题。我的if函数仍然在数组中添加一个,因为它没有更新vidids数组。谢谢,这仍然是个问题。是的,谢谢。我实际上已经更改了代码,但这似乎没有改变如前所述解决主要问题我已经更新了答案,是您想要实现的吗?谢谢您的更新,我正在尝试代码。您的更新仍然可以完成它需要做的事情,但没有解决我的主要问题。它只保留已返回的第一个ID,之后不保留其他ID。当newVideo()函数运行。