2016-11-21 2 views
0

ES6은 우리가 특정 값을 가진 Array 채울 수 있도록 객체의 새로운 인스턴스를 생성하지 않습니다새로운 배열 (_) (객체) 채우기가

function emptyRow() { 
    return new Array(9).fill(0); 
} 

이 기능은 길이 9의 Array 반환을 가득 단지 제로 :

>> emptyRow() 
<< Array [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ] 

지금 나는 그 빈 행의 구 가득되는 Array을 생성합니다. 아홉 번 호출 그러나

function emptyMatrix() { 
    return new Array(9).fill(emptyRow()); 
} 

, 대신 fill, 한 번 전화를 보인다 에 의해 생성 된 객체에 대한 새로운 Array 구에 대한 참조를 채 웁니다. 물론, 하위 배열 중 하나에서 값을 변경하면 모든 하위 배열에 대해 동일한 인덱스에서 값이 변경됩니다.

각 항목에 대해 새 개체를 만드는 방법이 있습니까?

+1

사용'[... 어레이 (9)]지도 (emptyRow)'당신'의 값으로 하나의 배열을 사용하고 –

+1

. 채우기 '는 배열이 9 번 배열로 채우는 것을 의미하며, 배열은 객체이므로 값의 참조로 전달되므로 기본적으로 동일한 배열로 9 번 끝납니다. – adeneo

+0

감사합니다. @Guedes, 그게 내가 필요한 것입니다. – GeckStar

답변

2

Array#fill은 도움이되지 않습니다. 이미 생성 된 객체 인 이 반환 한 값을 사용합니다. new Array() 생성자를 사용할 수는 없지만 함수를 허용하는 Array#map을 사용할 수 있습니다.

function emptyMatrix() { 
    Array.apply(null, {length: 9}).map(emptyRow); 
    // create the array   fill in values 
} 

또는 더 일반적으로 : 다음은 간단한 방법

function generateArray(n, valueFactory) { 
    return Array.apply(null, {length: n}).map(valueFactory); 
} 
+3

또는'Array.from ({length : 9}, emptyRow)' – loganfsmyth

0

function emptyMatrix(length) { 
 
    var matrix = new Array(); 
 
    for (var i = 0; i < length; i++) 
 
    matrix[i] = new Array(length).fill(0) 
 
    return matrix 
 

 
} 
 
console.log(emptyMatrix(5))

당신은 당신의 행렬의 길이를 설정할 수 있습니다

0

지도를 가진 다른 솔루션 당신은 생성 Array.from()을 사용할 수 있습니다

const createMatrix = (x, y) => Array.from({ length: x },() => 
 
    Array.from({ length: y },() => 0) 
 
); 
 

 
const result = createMatrix(9, 5); 
 

 
console.log(result);

0

당신은 당신이 원하는 길이의 배열을 만들 수 Array.from()을 사용할 수 있으며,이를 초기화 특정 길이의 배열, 그리고 Array.prototype.map()는 빈 행과 그것을 채우기 위해 :

const emptyRow =() => Array(9).fill(0); 
 

 
const generateArray = (n, valueFactory) => Array.from({length: 9}).map(valueFactory); 
 

 
console.log(generateArray(9, emptyRow));

0

을 :

var line = new Array(9).fill(0); 
 
var matrix = line.map(x => new Array(9).fill(0)) 
 
console.log(matrix);