【问题标题】:How to update a variable that is returned from a function?如何更新从函数返回的变量?
【发布时间】:2020-06-30 11:33:45
【问题描述】:

我一直在尝试编写返回函数。该函数的作用是存储最后生成的两个 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")
};

基本上这样做是获取返回的rando 值并将其推送到vidids 数组,如果有两个以上则删除第一个但不会,它不会更新let vidids = [];出于某种原因数组。每次运行 newVideo() 函数时,我都需要更新它。

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

我似乎不知道该怎么做,我做错了整件事还是这个功能还有希望?我应该如何编写该函数?

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

【问题讨论】:

  • 你有错字。它应该是if (vidids.length &lt; 2),因为您正在检查数组长度
  • 哦,谢谢。我错过了那个,但仍然不能解决数组不更新的问题。我的 if 函数仍然向数组添加一个,因为它没有更新 vidids 数组。谢谢你,这仍然是个问题。

标签: javascript arrays function if-statement


【解决方案1】:

为了保留数组的最后两个 Item,你可以使用类似这样的东西。

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 条件用于检查 'vidids' 数组的 length, 实际发生的是它比较数组引用而不是长度

要解决此问题,请在 IF 条件内的 'vidids' 之后添加 .length。

....
if (vidids.length < 2) {
.....

【讨论】:

  • 好的,谢谢。我实际上已经更改了代码,但这似乎并没有解决Here 所写的主要问题
  • 我已经更新了答案,你想实现吗?
  • 感谢您的更新,我正在尝试代码。您的更新仍然完成了它需要做的事情,但并没有解决我的主要问题。它只保留已返回的第一个 ID,之后不保留其他 ID。当 newVideo() 函数运行时,数组没有被更新。
【解决方案2】:

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

如下:

创建随机数的算法:

  function randomNum() {
  let rando = Math.floor((Math.random() * 3970) + 1);
  return rando;
};

然后我把这个函数放在一个变量中:

let videoid = randomNum()

我有另一个名为 videoids 的变量,它位于 randomNum 函数的上方外部,是一个数组:

let videoids = []

之后,我通过推送将使用videoid 创建的每个数字存储在videoids 中(此推送需要在您的函数中):

videoids.push(videoid);

好的,所以我以这种方式存储了所有数字。现在我应该在最后一个之前拍一个,这样我就可以去看上一个视频了。所以我需要创建一个函数,我使用了这个由Tadeck创建的函数,在this thread.

if (!Array.prototype.last) {
  Array.prototype.last = function() {
    return this[this.length - 2];
  };
};

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

function prevVideo() {
  document.getElementById("vsrc").src = srcRaw + videoids.last() + ".mp4";
  document.getElementById("videoEl").load();
  videoids.push(videoids.last());
}

注意:不要忘记将videoids.last 推送到您的videoids 中,否则您只能转到之前的号码一次。

【讨论】:

    猜你喜欢
    • 2013-09-24
    • 1970-01-01
    • 2010-09-07
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多