【问题标题】:javascript random item in array?数组中的javascript随机项?
【发布时间】:2014-09-26 14:00:59
【问题描述】:

所以我有一个strings: ["a", "b", "c", "d"] 的数组,但我希望array[4] 在每次使用时都是一个随机字符串,所以:

array[0] returns "a",
array[1] returns "b",

array[4] returns something random, like "x",
array[4] returns something random the second time as well, like "y",

有一个函数 random(),但如果我将 array[4] 设置为 random(),它将保持该随机值,但每次调用时都需要保持随机。

【问题讨论】:

  • 不要调用array[4] - 只需调用random()?
  • 这似乎更适合使用 getter 和 setter 的 javascript 对象/类
  • 不,我想调用 array[4] 不是随机的,我知道这有点模糊
  • +1 这个问题让我学到了一些我认为不可能的东西!

标签: javascript arrays random


【解决方案1】:

使用Object.defineProperty

var a = ["a", "b", "c", "d"];
Object.defineProperty(a, 4, { get: Math.random });

console.log(a[4]); // some random number
console.log(a[4]); // another random number

【讨论】:

  • 不错!不知道!
  • @FrancescoMM Object.defineProperty 的好处是它不需要任何特殊语法,并且在对象实例化后就可以工作。如果您不介意特殊用途的语法并且可以在实例化期间设置访问器,那么您的解决方案也可以工作(+1 给您)。
  • ..但我的甚至不是一个数组.. :(
【解决方案2】:
var array = { get 4() {return getRandomInt(1,10);} }

alert(array[4]);
alert(array[4]);
alert(array[4]);



function getRandomInt(min, max) {
  return Math.floor(Math.random() * (max - min)) + min;
}

【讨论】:

    【解决方案3】:
        function random() {
            character = String.fromCharCode(Math.floor( Math.random() * 26) + "a".charCodeAt(0));
            return character;
        }
    

    【讨论】:

      【解决方案4】:

      以下是实现类似功能的方法

      arrayManager = {
          array: ["a", "b", "c", "d"]
          set: function(i, v) {
              this.array[i] = v;
          }
          get: function(i) {
              if (i == 4) return random();
              else return this.array[i];
          }
      };
      
      var random = arrayManager.get(4);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-01
        • 1970-01-01
        • 2011-08-20
        • 2017-07-01
        • 2020-05-13
        相关资源
        最近更新 更多