Javascript 如何更新从函数返回的变量?
我一直在尝试写一个返回函数。这个函数将要做的是,它将存储最后两个已经生成的ID号,并在有新ID号时追加,删除第一个ID号 我有这个功能,它可以创建ID并播放带有该ID的视频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/
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()函数运行。