【问题标题】:Randomly generate name from Array with zero repeat?从零重复的数组中随机生成名称?
【发布时间】:2016-09-01 21:04:13
【问题描述】:

更新:不同之处在于我不是要创建一个列表,而是要创建一个可以单击并生成随机名称的按钮

目标:单击一个按钮并从数组中随机生成一个名称。我试图能够单击按钮并一次随机显示一个名称,而没有重复的名称。到目前为止,我已经能够随机选择一个名称,但名称仍然重复。如何更改我的代码以避免重复名称?

 $( ".next").click(function() {
     $(".intro").hide()
     var people = ["Andrew", "Adam", "Seth", "Mattos", "Eric"];
    for(i=0;i<1;i++){
    var randomPosition = Math.floor(Math.random() * people.length);
    var selected = people.splice(randomPosition,1);
    console.log(selected)

    $('#person').text(selected)


    if ($('#person').text() === "Mattos"){
        $("#selectedPerson").text("Mattos")
    }
    if ($('#person').text() === "Andrew"){
        $("#selectedPerson").text("Andrew")
    }
    if ($('#person').text() === "Eric"){
        $("#selectedPerson").text("Eric")
    }

    if ($('#person').text() === "Seth"){
        $("#selectedPerson").text("Seth")
    }
    if ($('#person').text() === "Adam"){
        $("#selectedPerson").text("Adam")
    }
    }
    });

【问题讨论】:

标签: javascript jquery html arrays random


【解决方案1】:

问题是每次输入函数时都在创建数组。所以把名字从数组中拼接出来是没有任何作用的,因为下次还要重新填充。您需要将数组初始化移出函数。

其他问题:splice() 返回一个数组,而不是单个元素,即使您只是从数组中拼接出 1 个元素。如果您只循环 1 次,则不需要 for() 循环。不需要所有 if 语句,因为您只是在所有情况下都分配了相同的字符串。

而且你应该检查你的名字用完了的情况。

var people = ["Andrew", "Adam", "Seth", "Mattos", "Eric"];

$( ".next").click(function() {
    $(".intro").hide();
    if (people.length == 0) { // No names left to show
        return;
    }
    var randomPosition = Math.floor(Math.random() * people.length);
    var selected = people[randomPosition];
    people.splice(randomPosition,1);
    console.log(selected)

    $('#person,#selectedPerson').text(selected);
});

【讨论】:

  • 内容丰富且乐于助人。完美的答案。感谢您抽出宝贵时间!
猜你喜欢
  • 2023-03-30
  • 2021-12-18
  • 1970-01-01
  • 2015-08-13
  • 2021-01-01
  • 2011-12-28
  • 2016-05-05
  • 2014-01-11
相关资源
最近更新 更多