小编Rus*_*ell的帖子

如何有效地随机选择数组项而不重复?

我知道这个问题在许多方面存在,但我无法找到与我的具体效率问题相关的答案.

我有下面的代码,工作得很好.

我有一个10项数组,我从中随机选择一个项目(按下输入键).代码保留了最近5个选项的数组,这些选择不能随机选择(以避免随着时间的推移重复过多).

如果chooseName()函数最初选择在最近的5中使用的名称,它只会断开并再次调用自身,重复直到找到"唯一"名称.

我有两个问题:

  1. 说这是一个"递归函数"是否正确?

  2. 我担心理论上这可能会在找到一个唯一名称之前保持循环很长时间 - 是否有更有效的方法来执行此操作?

感谢您的任何帮助.

    var a = ["Roger", "Russell", "Clyde", "Egbert", "Clare", "Bobbie", "Simon", "Elizabeth", "Ted", "Caroline"];
    var b = [];

    var chooseName = function () {
    var unique = true;
    b.length = 5;
    num = Math.floor(Math.random() * a.length);
    name = a[num];    
        for (i = 0; i < a.length; i++) {
        if (b[i] == name) {
            chooseName();
            unique = false;
            break;
            }
        }
        if (unique == true) {
        alert(name);
        b.unshift(name);
        }
    }


    window.addEventListener("keypress", function …
Run Code Online (Sandbox Code Playgroud)

javascript

13
推荐指数
3
解决办法
2万
查看次数

何时使用带有javascript函数的括号

我有一个函数调用showText()它将一些文本从表单文本框复制到其他地方的段落.它被调用如下:

document.getElementById("mybutton").onclick = showText; 
Run Code Online (Sandbox Code Playgroud)

如果我将()添加到showText的末尾,它将无法工作,我从阅读中了解到类似的答案,这是调用函数的唯一方法.

稍后在脚本中它需要()工作:

window.addEventListener("keypress", function(e) {
    var keycode = e.keyCode;
    if (keycode == 13) {
        showText();
    }
}, false);
Run Code Online (Sandbox Code Playgroud)

我不确定这里发生了什么.

javascript

5
推荐指数
1
解决办法
2152
查看次数

页面重定向在PHP或JavaScript中不能始终如一地工作

我在这里阅读了各种来源,并创建了以下10秒后重定向用户的方法.没有同时使用.

PHP的第一次尝试:

header("refresh:10;url=?switch=1")
Run Code Online (Sandbox Code Playgroud)

然后,在JavaScript中进行第二次尝试:

window.setTimeout(function () {
    location.href = '?switch=1';
}, 10000);
Run Code Online (Sandbox Code Playgroud)

他们几乎都在工作.它们在使用reveal.js的页面上使用(就像这一个).有时,当URL片段发生变化时,页面根本不再重定向 - 但是,通常情况下,重定向确实有效.

任何人都可以让我知道问题可能是什么,或者是一个阅读有关问题的好资源?

编辑:更改为setIntervalJavaScript版本导致它再次尝试.

javascript php redirect reveal.js

5
推荐指数
2
解决办法
638
查看次数

检测用户在文本框中键入内容

我正在使用侦听器来检测用户何时完成文本框; 当文本值改变时,我使用innerHTML将文本粘贴到页面上.

document.getElementById("dateinput").addEventListener("change", function() {
     myDate(document.getElementById("dateinput").value);
     }, false);
Run Code Online (Sandbox Code Playgroud)

是否有办法监听每个按键,以便在键入时立即按字符粘贴.value字符?我只想在文本框具有焦点时执行此操作.

谢谢.

javascript

3
推荐指数
2
解决办法
5819
查看次数

我使用split()时localStorage清除

我想基于名为"names"的localStorage变量创建一个名称数组.我使用String.split()来检测似乎运行良好的新行,但是如果我多次刷新页面则不行.

var names = localStorage.names;     

if (!names) {
textArea.style.display = "block";
mybutton.style.display = "block";
} else {
    textSplit = localStorage.names.split(/\n/); 
    copyInput1.innerHTML = textSplit[0];
    copyInput2.innerHTML = textSplit[1];
    copyInput3.innerHTML = textSplit[2];
}

document.getElementById("textArea").focus();

var showText = function() {
    var text = textArea.value;      
    localStorage.names = text;
    textSplit = localStorage.names.split(/\n/);     
    copyInput1.innerHTML = textSplit[0];
    copyInput2.innerHTML = textSplit[1];
    copyInput3.innerHTML = textSplit[2];
}

mybutton.onclick = showText;
clearbutton.onclick = localStorage.clear();
Run Code Online (Sandbox Code Playgroud)

任何帮助赞赏.

javascript

0
推荐指数
1
解决办法
57
查看次数

检测在javascript中单击了哪个节点

我标有几个跨度.

<span class="viewEdit">View and edit class one.</span>
<span class="viewEdit">View and edit class two.</span>
<span class="viewEdit">View and edit class three.</span>
<span class="viewEdit">View and edit class four.</span>
<span class="viewEdit">View and edit class five.</span>
Run Code Online (Sandbox Code Playgroud)

我想创建一个功能,增加了一个"上点击"事件,其检测的跨度被点击了.也就是说,如果被点击第一个首先它会返回"0",第二个"1" ...等.

我意识到我可以使用

document.getElementByClassName("viewEdit)
Run Code Online (Sandbox Code Playgroud)

创建一个数组,但我不知道如何检测哪一个被点击.

我试图在这里研究这个问题,但怀疑我说错了,因为我找不到任何东西.如果这是对其他地方的类似问题的回答,请道歉.

javascript

0
推荐指数
1
解决办法
186
查看次数

向JavaScript对象添加多个方法

阅读了JS对象后,我相信我可以通过以下方式添加方法:

var activity = {
name: null,
start: null,
finish: null,
alarm: function (x) {
    if (x === this.start) {
    return true;
    }
    if (x !== this.start) {
    return false;
    }
}       
colour: function (x) {
    if (x < this.start) { 
    return "red"; 
    }
    if (x > this.start && x < this.finish) { 
    return "green"; 
    }
    if (x > this.finish) { 
    return "grey"; 
    }   
}

};
Run Code Online (Sandbox Code Playgroud)

当我通过JSFiddle运行时,它说

预期'(结束)'反而看到':'.

旁边有"颜色"的行.

我不确定我做错了什么?

javascript methods

-2
推荐指数
1
解决办法
46
查看次数

标签 统计

javascript ×7

methods ×1

php ×1

redirect ×1

reveal.js ×1