在随机位置用0填充数组

时间:2020-05-03 11:55:58

标签: javascript arrays

我有一个看起来像这样的数组

[ [1], [14, 17], [27], [30, 35], [42, 45], [56, 59], [69], [79], [81, 83, 87]]

我想遍历此数组,并用0填充数组内部的数组,直到每个数组每个数组具有3个值。但是我不想只填充开始或结束位置,我希望将0随机放置。我正在尝试构建1-90宾果卡,以便将数字随机放置在每一列中。

所以最终结果看起来像

[ [0, 1, 0], [14, 17, 0], [0, 0, 27], [0, 30, 35], [42, 0, 45], [56, 59, 0], [69, 0, 0], [0, 0, 79], [81, 83, 87]]

谢谢

3 个答案:

答案 0 :(得分:4)

您可以使用map方法和while循环来执行此操作,只要当前元素的长度为0,该循环将在映射迭代中当前元素的随机索引(最大索引为2)处插入0。 <3。

const data = [ [1], [14, 17], [27], [30, 35], [42, 45], [56, 59], [69], [79], [81, 83, 87]]
const result = data.map(a => {
  let arr = [...a]
  
  while (arr.length < 3) {
    const index = parseInt(Math.random() * 3)
    arr.splice(index, 0, 0)
  }

  return arr
})

console.log(result)

答案 1 :(得分:0)

const shuffle = (a) => {
    for (let i = a.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [a[i], a[j]] = [a[j], a[i]];
    }
    return a;
}
base = [ [1], [14, 17], [27], [30, 35], [42, 45], [56, 59], [69], [79], [81, 83, 87]];

base.map((subArray) => {
    const itemsToAdd = 3 - subArray.length;
    if (itemsToAdd < 1) {return subArray;}
    const zeros = new Array(itemsToAdd ).fill(0);
    return shuffle(subArray.concat(zeros));
});

答案 2 :(得分:-1)

您可以根据数组中可用元素的长度创建随机数,然后我们可以遍历数组并根据条件放置值

let arr = [ [1], [14, 17], [27], [30, 35], [42, 45], [56, 59], [69], [79], [81, 83, 87]]

let randomNumber = _ => {
   return Math.floor(Math.random() * 3)
}

let final = arr.map(v =>{
  let length = v.length
  let array = new Array(3).fill(undefined)
  let temp = 3 - length
  let set = new Set()
  while(temp){
    let num = randomNumber()
    if(!set.has(num)){
      array[num] = 0
      set.add(num)
    }else {
      continue;
    }
    temp--;
  }
  let index = 0
  return array.map(value=> value !== 0 ? v[index++] : 0)
})

console.log(final)

相关问题