随机选择javascript中的数组项

时间:2014-06-07 02:31:49

标签: javascript html arrays

我的index.html页面中有以下代码

<body>
    <script type="text/javascript" src="words.js"></script>
    <script>
        var words = [];
        window.onload = function () {
            words = getwords();
        };
    </script>
</body>

在word.js文件中

function getwords() {
    var block = [];
    var keyword = ['HELLO', 'CYCLE', 'APPLE', 'albatross', 'platform', 'OPERA', 'COURT', 'HOUSE', 'NEWEST', 'AEROPLANE', 'SCIENTIST', 'CORRIDOR', 'BUTTERFLY'.
        'MUSICAL', ' AUSTRALIA', 'XYLOPHONE', 'TAPESTRY', 'DREAM', 'NEEDLE', 'GIRAFFE'
    ];

    var index = [];
    for (var p = 0; p < keyword.length; p++) {
        index[p] = 0;
    }
    for (var i = 0; i < 8; i++) {
        var x = Math.floor(Math.random() * (keyword.length - 1));
        for (var j = 0; j <= i; j++) {
            if ((words[j] !== keyword[x]) && (index[x] !== 1)) {
                block[i] = keyword[x];
                index[x] = 1;
            }
        }
    }
    return block;
}

我希望我的getwords函数每次在onload中调用时返回关键字数组中的任何8个单词,它应该存储在单词数组中,这些单词不应该在下次修复。但是我的代码不起作用。我可以知道我的错吗?请帮忙!

我试过

function getwords(){
var block = [], index =[];
var rem = keyword.length -1;
for(var p=0 ;p <(rem+1) ;p++)
{
index[p]=0;
}

 for(var i = 0; i < rem; ++i) keys.push(i);
 for(var i=0; i<8 ;i++) {
    var x = Math.floor(Math.random() * rem);
    while(index[x]===1)
    {
     x = parseInt(Math.random() * rem);
    }
    block.push(keyword[x]);
    index[x]=1;
    }

    return block;
    }

在第二次通话时仍然会给出相同的词语。

3 个答案:

答案 0 :(得分:1)

一个小小的错误让你失去了这个问题......

在索引数组中存储索引时,您正在使用index[p] = 0;

但应该是

for(var p = 0; p < keyword.length; p++) {
    index[p] = p;
}

这是Working Example

答案 1 :(得分:0)

我可以给你一个更好的方法。测试没问题,试一试。

var keyword=[
    'HELLO', 'CYCLE', 'APPLE', 'albatross', 'platform',
    'OPERA', 'COURT', 'HOUSE', 'NEWEST', 'AEROPLANE',
    'SCIENTIST', 'CORRIDOR', 'BUTTERFLY', 'MUSICAL',
    'AUSTRALIA', 'XYLOPHONE', 'TAPESTRY', 'DREAM',
    'NEEDLE', 'GIRAFFE'];

var keys = [];
for(var i = 0; i < keyword.length; ++i) keys.push(i);

function getwords(count){
    var block = [];
    // first.
    // pick and remove [count] times. Becareful when keys goes empty.
    while(count > 0 && keys.length > 0) {
        var x = parseInt(Math.random() * keys.length);
        block.push(keyword[keys[x]]);
        keys[x] = keys[keys.length-1];
        keys.pop();
        --count;
    }
    return block;
}

console.log(getwords(8));
console.log(getwords(8));
console.log(getwords(8));

答案 2 :(得分:-1)

你的意思是“不起作用”?什么显示控制台?

'蝴蝶'。 '音乐'。有一个点而不是逗号。

希望它有所帮助。