【问题标题】:Javascript: returning random element from each element in an array of arrays *and strings*Javascript:从数组*和字符串*中的每个元素返回随机元素
【发布时间】:2020-08-28 21:47:30
【问题描述】:

我有一个包含字符串和数组的数组。我正在尝试创建一个函数,在其中传递此数组并从数组中的每个数组和其他完整字符串返回一个随机选择的值。不幸的是,当数组的每个元素本身都是数组时,我当前的解决方案才有效,但仅当元素是字符串时才从字符串中返回随机字符。我想返回完整的字符串。

这是我的函数的一个工作示例,并显示了假数据的问题:

虽然我的解决方案在每个数组包含超过 1 个元素时有效,但当数组仅包含 1 个元素时,我的方法会从 1 个元素中选择 1 个随机字母。

// 我们首先定义一个函数来从数组中采样 K 个元素 // 无需替换。这对于随机分配很有用。

// Define a function to N random elements from an array
function getRandom(arr, n) {
    var result = new Array(n),
        len = arr.length,
        taken = new Array(len);
    if (n > len)
        throw new RangeError("getRandom: more elements taken than available");
    while (n--) {
        var x = Math.floor(Math.random() * len);
        result[n] = arr[x in taken ? taken[x] : x];
        taken[x] = --len in taken ? taken[len] : len;
    }
    return result;
};

// Create a function that, given an array X containing
// arrays 1,2,3...k, randomly select one element from each 1, 2, 3, ...k
// and return an array containing the values
    function get1RandomForEach(array){
        return array.map(attr => getRandom(attr, 1));
    }

// Generate fake data 
   var one_element = ["foobar"];
   var multiple_elements =  ["foo", "bar"];
   var array_of_arrays = [["foo","bar"], ["foo", "bar"], ["foo"]];
   var array_of_mixed = [["foo","bar"], ["foo", "bar"], "foo"]];


// Apply function
  get1RandomForEach(one_element) // 1 char
  get1RandomForEach(multiple_elements) // 1 char for each element
  get1RandomForEach(array_of_arrays) // this is what I want!
  get1RandomForEach(array_of_mixed) // 1 char for 3rd element

这是否像使用 map 将数组的每个元素转换为数组一样简单?但后来我担心我会在数组中创建另一组数组。请注意,这与之前的帖子不同,因为我没有数组数组(这是显示我想要的示例案例之一)。

【问题讨论】:

    标签: javascript arrays string random


    【解决方案1】:

    只需让map 回调检查它是什么类型的值:

    return array.map(attr => Array.isArray(attr) ? getRandom(attr, 1) : attr);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多