2017-02-02 29 views
1

是否有一種更有用的方法來創建Javascript中的2d數組比我在這裏?也許使用.apply用Javascript生成2d數組/ es6

generatePuzzle(size) { 
    let puzzle = []; 
    for (let i = 0; i < size; i++) { 
    puzzle[i] = []; 
    for (let j = 0; j < size; j++) { 
     puzzle[i][j] = Math.floor((Math.random() * 200) + 1); 
    } 
    } 
    return puzzle; 
} 

例如,在Python中,你可以這樣做[[0]*4]*4創建一個4x4列表

+0

您可以使用forEach,地圖等創建一個二維數組並映射到隨機數 – Li357

回答

4
const repeat = (fn, n) => Array(n).fill(0).map(fn); 
const rand =() => Math.floor((Math.random() * 200) + 1); 
const puzzle = n => repeat(() => repeat(rand, n), n); 

然後puzzle(3),例如,將返回一個填充隨機數字的3x3矩陣。

0

隨着lodash就像如下:

const _ = require('lodash'); 

function generatePuzzle(size) { 
    return _.times(size,() => _.times(size,() => (Math.random() * 200) + 1)); 
} 
+1

當然,但OP沒有使用Lodash,爲一個小操作添加整個庫有什麼意義? – Li357

+0

嗯,我在大多數代碼庫上都有lodash –

+0

無論如何,它很容易實現自己的版本「時代」 –

1
function generatePuzzle(size) { 
    return (new Array(size)).fill((new Array(size)).fill(Math.floor((Math.random() * 200) + 1))); 
} 

或者相同的(具有凹口,爲了清楚起見):

function generatePuzzle(size) { 
    return (new Array(size)).fill(
      (new Array(size)).fill(
       Math.floor((Math.random() * 200) + 1) 
      ) 
     ); 
} 

注:這將填充2D陣列以相同的隨機數。不是你要求的,但是如果他只想用相同的數字初始化二維數組,可以被其他人使用。

+0

所有項目將具有相同的值 –

+0

@ evgeny.myasishchev是啊!我沒有注意到它!我提了一張便條來提及它。 –