[javascript] 동일한 요소가 여러 번 반복되는 배열 만들기

파이썬에서 [2]리스트가있는 곳 에서 다음 코드는이 출력을 제공합니다.

[2] * 5 # Outputs: [2,2,2,2,2]

JavaScript의 배열로 이것을 수행하는 쉬운 방법이 있습니까?

나는 그것을하기 위해 다음 함수를 작성했지만 더 짧거나 더 좋은 것이 있습니까?

var repeatelem = function(elem, n){
    // returns an array with element elem repeated n times.
    var arr = [];

    for (var i = 0; i <= n; i++) {
        arr = arr.concat(elem);
    };

    return arr;
};



답변

다음과 같이 할 수 있습니다 :

function fillArray(value, len) {
  if (len == 0) return [];
  var a = [value];
  while (a.length * 2 <= len) a = a.concat(a);
  if (a.length < len) a = a.concat(a.slice(0, len - a.length));
  return a;
}

각 반복마다 배열을 두 배로 늘리므로 반복 횟수가 거의없는 매우 큰 배열을 만들 수 있습니다.


참고 : 반복 할 때마다 새 배열을 만들 므로 push대신 대신을 사용하여 함수를 크게 향상시킬 수 있습니다 . 이와 같이 (배열로 작업하는 방법의 예와 같이) :concatconcat

function fillArray(value, len) {
  var arr = [];
  for (var i = 0; i < len; i++) {
    arr.push(value);
  }
  return arr;
}


답변

ES6에서 Array fill () 메소드 사용

Array(5).fill(2)
//=> [2, 2, 2, 2, 2]


답변

>>> Array.apply(null, Array(10)).map(function(){return 5})
[5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
>>> //Or in ES6
>>> [...Array(10)].map((_, i) => 5)
[5, 5, 5, 5, 5, 5, 5, 5, 5, 5]


답변

당신은 시도 할 수 있습니다:

Array(6).join('a').split(''); // returns ['a','a','a','a','a'] (5 times)

업데이트 (01/06/2018) :

이제 일련의 문자를 반복 할 수 있습니다.

new Array(5).fill('a'); // give the same result as above;
// or
Array.from({ length: 5 }).fill('a')

참고 : 호환성 및 브라우저 지원에 대해서는 fill (…)from (…) 에 대해 자세히 확인하십시오 .

업데이트 (05/11/2019) :

또 다른 방법, 사용하지 않고 fill또는 from어떤 길이의 문자열에 대한 그 작품을 :

Array.apply(null, Array(3)).map(_ => 'abc') // ['abc', 'abc', 'abc']

위의 답변 과 동일합니다 . 완전성을 위해 추가.


답변

Array.from({length:5}, i => 1) // [1, 1, 1, 1, 1]

또는 가치가 증가하는 배열을 만듭니다

Array.from({length:5}, (e, i)=>i) // [0, 1, 2, 3, 4]


답변

lodash 에서는 그렇게 나쁘지 않습니다.

_.flatten(_.times(5, function () { return [2]; }));
// [2, 2, 2, 2, 2]

편집 : 더 나은 :

_.times(5, _.constant(2));
// [2, 2, 2, 2, 2]

편집 : 더 나은 :

_.fill(Array(5), 2);


답변

[c] * n 다음과 같이 쓸 수 있습니다 :

Array(n+1).join(1).split('').map(function(){return c;})

그래서 [2] * 5

Array(6).join(1).split('').map(function(){return 2;})