尝试过滤最近使用的数组项

时间:2014-08-22 16:49:06

标签: javascript arrays

Array.prototype.spil = function (x,max) {
    if (this.length===max) {
        this.shift();
        this.push(x);
    } else {
        this.push(x);
    }
    return this;
}

var heard = [0],
    freash = [];

$('#speak').bind('touchstart', function() {
    var sounds = [
        1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,
        21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40
    ];
    var temp = sounds;
    for (var i=0; i<heard.length; i++) {
        temp.splice(temp.indexOf(heard[i]), 1);
    }
    freash = temp;
    var say = Math.floor(Math.random() * freash.length+1) + 1;
    heard.spil(say,10);
    say = document.getElementById('c'+say); // audio element
    // use the sound...
});

我尝试制作播放“不是最近的声音”的声音。不管用!我想让10个按钮点击时播放的最后一个声音不再播放。

heard是您已经听过的声音数组,它有Array.spil函数,它将通过push填充数组,直到它达到最大长度为10时shift然后push代替。

freash是声音数组,不存在heard数组的成员。

您可以看到heardfreash是在点击(touchstart)范围之外宣布的。

如果我点击/点击有时我会听到比我想象的更早播放的声音,经常互相跟随。

这让我困扰了好几天,但是我无法在逻辑上看到这个问题。你能吗?

1 个答案:

答案 0 :(得分:1)

我想这一行

var say = Math.floor(Math.random() * freash.length+1) + 1;

应该是

var say = freash[Math.floor(Math.random() * freash.length)];

还要考虑快捷方式

var say = freash[Math.random() * freash.length | 0];