如何从数组中取随机元素而不重复并将其放入textarea

时间:2016-03-11 14:25:48

标签: javascript

如何以随机顺序设置包含数组中所有值的textarea的值? 我目前有两个问题:

  • 如果我遍历数组,它只会将一个元素放入 textarea
  • 我不希望元素重复

这是我的代码

var area = document.getElementById('area');
var arr =['www.google.com','www.bing.com','www.yahoo.com','www.codecademy.com','twitter.com'
    ];    
var rand = arr[Math.floor(Math.random()*arr.length)];

for(var i in arr) {
    area.value = arr[i];
}

2 个答案:

答案 0 :(得分:5)

你实际上只想将数组洗牌,然后用你想要的任何东西加入数组。

例如,使用this answer

中的随机播放功能
/**
 * Shuffles array in place.
 * @param {Array} a items The array containing the items.
 * @return {Array} a The shuffled array
 */
function shuffle(a) {
    var j, x, i;
    for (i = a.length; i; i -= 1) {
        j = Math.floor(Math.random() * i);
        x = a[i - 1];
        a[i - 1] = a[j];
        a[j] = x;
    }
}

然后像这样使用它:

var area = document.getElementById('area');
var arr =['www.google.com','www.bing.com','www.yahoo.com','www.codecademy.com','twitter.com'];    
shuffle(arr);

area.value = arr.join(' '); // or with whatever you want to separate them

检查jsfiddle示例:here

答案 1 :(得分:-1)

您可以尝试通过拼接来删除已经打印过的元素。

var origArr = arr;

for(var i in arr) {
    area.value = arr[i];
    arr.splice(i, 1);
}