我有一个看起来像这样的数组
[ [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]]
谢谢
答案 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)