function createArrayWith(length,value){...} createArrayWith(2,3) => [3, 3] createArrayWith(2,{test:2}) => [{test:2}, {test:2}]
條件: 儘可能的簡潔數組
function createArrayWith(length,value){ return new Array(length).map(function(){ return value }) }
createArrayWith(2,3) [ , ]
map calls a provided callback function once for each element in an array, in order, and constructs a new array from the results. callback is invoked only for indexes of the array which have assigned values, including undefined. It is not called for missing elements of the array (that is, indexes that have never been set, which have been deleted or which have never been assigned a value).app
from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/mapide
原來數組中的"空"元素,map
(包括foreEach
)都是不會去遍歷處理的. 而只傳一個參數new
出來數組,每一個元素都是空的函數
觀察Array
構造函數的接口this
new Array(element0, element1[, ...[, elementN]]) new Array(arrayLength)
能夠用不定參數的方式來建立code
function createArrayWith(length,value){ return Array.apply(null,new Array(length)).map(function(){ return value }) } // 可行 createArrayWith(2,3) [ 3, 3 ]
function createArrayWith(length,value){ return Array.apply(null,new Array(length)).map(()=>value) } createArrayWith(2,3) [ 3, 3 ]
new
也能夠去掉function createArrayWith(length,value){ return Array.apply(null,Array(length)).map(()=>value) } createArrayWith(2,3) [ 3, 3 ]
到了這一步好像是最簡潔的實現方式了,可是看起來是在太怪異了.接口
在MDN 過Array
方法的時候,發現了竟然有這個一個函數ip
arr.fill(value[, start = 0[, end = this.length]])
頓時草泥馬奔騰,原來ES6添加了這個新函數.element
在ES6的環境下的話,最簡潔的方式仍是get
function createArrayWith(length,value){ return new Array(length).fill(value) } createArrayWith(2,3) [ 3, 3 ]
折騰完畢