【问题标题】:Randomized Array Will Not Update随机数组不会更新
【发布时间】:2013-11-25 23:26:45
【问题描述】:

我正在编写一个数组中会有多个动作的代码。

var randomStringsWriting = [
'Write about ' + randomObjectsPlural,
'Think about ' + randomObjectsPlural,
'Love ' + randomObjectsPlural

“randomObjectsPlural”变量是另一个带有名词的数组

var randomObjectsPluralList = [
'cats',
'dogs',
'people',
]

为了让我更容易写一个变量而不是方程,我最初设置了这个(注意这是初始数组中的变量,而不是“randomObjectsPluralList”)

 var randomObjectsPlural = randomObjectsPluralList[0]

我希望每次点击时都能更新文本,所以我写了这个函数:

$("#screen" ).click(function(){
randomObjectsPlural =  randomObjectsPluralList[Math.floor(Math.random()*randomObjectsPluralList.length)];
});

奇怪的是,当我点击随机化时,尽管点击随机化,但仍保留相同的“randomObjectsPlural”变量。例如,屏幕最终会显示...

Write about cats
Think about cats
Love cats

...当我想要更多类似的东西时

Write about cats
Think about people
Love dogs

名词改变的唯一方法是刷新页面。这里到底发生了什么?

【问题讨论】:

  • 你能发一个JSFiddle吗?请问?
  • 点击更改变量值。它不会更改字符串数组的内容。该数组的值是在等号将连接形成的字符串列表放入其中时设置的。在你再次这样做之前它不会改变。此外,相同的代码使用相同的值连接到所有字符串中。所以它们永远是一样的。
  • 那么我该如何修复/绕过/重写这个?

标签: javascript arrays random


【解决方案1】:

我不确定你是如何将这一切连接起来的,但是当你 click 时,你必须一次又一次地随机化每个项目。

到目前为止,您显示的内容表明您只在开始时设置了 randomStringsWriting 数组,因此您只在页面加载时更新它。

您还将每个项目设置为randomObjectsPlural,但似乎您只是设置了变量。您需要为每个人随机分配一个新的randomObjectsPlural

再一次,因为我不知道你是如何实际连接的,所以下面是一个演示来实现你正在寻找的东西。

下面是一个例子。您仍然需要采用逻辑并将其调整到您自己的实现中。

假设以下 HTML:

<button id="screen">Click</button>
<div id="output"></div>

下面的 JavaScript 可以解决问题:

var getRandomListItem = function () {
    return randomObjectsPluralList[Math.floor(Math.random() * randomObjectsPluralList.length)]
};

var randomObjectsPluralList = [
    'cats',
    'dogs',
    'people']

$("#screen").click(function () {
    var randomStringsWriting = [
    'Write about ' + getRandomListItem(),
    'Think about ' + getRandomListItem(),
    'Love ' + getRandomListItem()]

    $('#output').html(randomStringsWriting.join('<br />'));
});

DEMO - 随机化字符串值


由于您只是从可能的 3 个中选择一个随机值,因此很可能您仍然会得到所有 3 个相同的随机值。

如果您想要随机 + 不同,那么您还需要跟踪已经选择的每个值,直到所有值都被选中,然后重新设置跟踪器,但这是一个稍微复杂的过程。

【讨论】:

  • 这看起来像是答案,但我不太确定如何实现它。我构建了一个 jfiddle,但它的元素可能是无关的,因为有时当我取出某些元素时它不起作用,所以希望它是可读的。 jsfiddle.net/Uh4xw
  • 我不太确定你的最终设计意图是什么,但我稍微修改了代码,所以randomStringsWriting 现在也是一个函数。这样,当它被调用时,它每次都会再次随机设置值,因为它为每个值调用getRandomListItemYour updated fiddle 我希望这更接近您所寻找的。​​span>
  • 非常感谢您花时间帮助我解决这个问题!我希望我不止一次投票,哈哈。
  • @AlexanderLozada:非常欢迎您。很高兴它帮助了你。
猜你喜欢
  • 1970-01-01
  • 2020-09-04
  • 2013-09-26
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-16
相关资源
最近更新 更多