Javascript 用不同的值填充数组的数组
我有一个包含元素的数组,例如:Javascript 用不同的值填充数组的数组,javascript,arrays,math,foreach,Javascript,Arrays,Math,Foreach,我有一个包含元素的数组,例如: var one = [1span,2span,3span,4span,5span,6span,7span]; var two = [1span,2span,3span,4span,5span,6span,7span]; var three = [1span,2span,3span,4span,5span,6span,7span]; var ...till seven. var total = [one,two,three ..till 7] 基本上我们有7个数组
var one = [1span,2span,3span,4span,5span,6span,7span];
var two = [1span,2span,3span,4span,5span,6span,7span];
var three = [1span,2span,3span,4span,5span,6span,7span];
var ...till seven.
var total = [one,two,three ..till 7]
基本上我们有7个数组,total variable
将为所有7个数组中的每一个显示7个元素
现在我有了一个函数,它应该在每个部分用1到7的不同数字填充变量
var bar = [1, 2, 3, 4, 5, 6, 7];
for(var j=0; j<total.length; j++) {
Array.from(total[j]).forEach(function(e, i, a) {
e.textContent = bar[Math.round(Math.random()*(bar.length-1))];
console.log(e,i,k);
});
}
var-bar=[1,2,3,4,5,6,7];
对于(var j=0;j,您可以使用给定数组的副本生成随机项,而无需重复
函数生成(计数、值){
返回数组.apply(null,{length:count}).map(函数(){
var r=[],
数组=values.slice();
while(array.length){
r、 push(array.splice(Math.floor(Math.random()*array.length),1)[0]);
}
返回r;
});
}
log(generate(7[1,2,3,4,5,6,7]);
如果我们想将问题扩展到一个由随机整数填充的N维数组的一般情况,那么可重用的方法可以如下
我们将使用两个我非常喜欢使用的通用函数;Array.prototype.clone()
和Array.prototype.shuffle()
。我们的arrayND
函数的参数数量不定。最后一个参数将指定最小值(基本值)要填充的随机整数的长度。前面的参数将给出每个维度的长度。因此,在特定情况下,我们需要一个2D 7x7矩阵,每个矩阵中从1开始填充随机但唯一的数字,我们将调用函数作为arrayND(7,7,1)
Array.prototype.shuffle=function(){
var i=此长度,
J
而(i>1){
j=~(Math.random()*i--);
[this[i],this[j]=[this[j],this[i]];
}
归还这个;
};
Array.prototype.clone=函数(){
返回此.map(e=>Array.isArray(e)?e.clone():e);
};
函数arrayND(…n){
返回n.reduceRight((p,c)=>c=Array(…Array(c)).map((e,i)=>Array.isArray(p)?p.clone().shuffle():i+p));
}
var-arr=arrayND(7,7,1);
console.log(arr);
由于您希望将这些数组一起处理,因此应将它们组合到一个数据结构中:
var spans = [ one, two, tree, ..., seven ]
现在你想要一个不重复的随机顺序,把可能的索引放入一个数组中,然后洗牌:
var indices = [0,1,2,3,4,5,6];
还有一些洗牌者:
function shuffle(arr){
for(var i=arr.length, j, tmp; i-- > 1; ){
tmp = arr[j = 0|(Math.random()*i)];
arr[j] = arr[i];
arr[i] = tmp;
}
return arr;
}
现在,如果要将节点作为总计:
var total = shuffle(indices).map((index, n) => spans[n][index]);
至少就我所知,你的问题/代码/意图。你在哪里定义了arr
变量?@Mr_Green啊arr应该是bar变量,我已经编辑过了,谢谢你!嗨,尼娜,谢谢你的努力,但我有点困惑,我该如何应用generate()函数,用于total var中的每个变量:|如果向问题中添加一个可能的结果,这会更容易。基本上,我应该将示例中给定的数组插入到我的表中。问题是遍历表单元格并在每个单元格上添加一个值,但不幸的是在单元格中添加所有间隔:|。请参阅fiddle:您可以只生成一个数组e.textContent=generate(1[1,2,3,4,5,6,7]);
而不是7。但是你需要一个更小的函数,一对一而不是7。或者使用第二个方案。我想你误解了,我的想法是我拥有了7x7的电路板,这要感谢你的第一个脚本,我对它做了一些修改,添加了一个“for循环”要为每行接收一个数组,我的问题是如何迭代board结果并将它们添加到我的网格中。因此,基本上,脚本的结果应该通过在一个单元格中添加一个数字和在一个网格行中添加一个行数组来添加到我的html中。