programing tip

Lodash를 사용하여 자바 스크립트 배열을 청크로 분할

itbloger 2020. 10. 23. 07:38
반응형

Lodash를 사용하여 자바 스크립트 배열을 청크로 분할


JavaScript 배열을 n크기가 지정된 청크 로 분할해야합니다 .

예 : 주어진 배열

["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13"]

a n가 4이면 출력은 다음과 같아야합니다.

[ ["a1", "a2", "a3", "a4"],
  ["a5", "a6", "a7", "a8"],
  ["a9", "a10", "a11", "a12"],
  ["a13"]
]

이 문제에 대한 순수한 JavaScript 솔루션알고 있지만 이미 Lodash를 사용하고 있기 때문에 Lodash가 이에 대한 더 나은 솔루션을 제공하는지 궁금합니다.

편집하다:

밑줄 솔루션이 얼마나 느린 지 확인하기 위해 jsPerf 테스트만들었습니다 .


lodash의 청크를 살펴보세요 : https://lodash.com/docs#chunk

var data = ["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13"];
_.chunk(data, 3); 
// [
//  ["a1", "a2", "a3"],
//  ["a4", "a5", "a6"],
//  ["a7", "a8", "a9"],
//  ["a10", "a11", "a12"],
//  ["a13"]
// ]

밑줄 기반 솔루션의 경우 다음을 시도하십시오.

var data = ["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13"];
var n = 3;
var lists = _.groupBy(data, function(element, index){
  return Math.floor(index/n);
});
lists = _.toArray(lists); //Added this to convert the returned object to an array.
console.log(lists);

체인 래퍼 방법을 사용하면 다음과 같이 두 문을 결합 할 수 있습니다.

var data = ["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13"];
var n = 3;
var lists = _.chain(data).groupBy(function(element, index){
  return Math.floor(index/n);
}).toArray()
.value();

더 간단한 표현 :

    _.range(coll.length / n).map(i => coll.slice(i * n, (i + 1) * n))

밑줄은 1.9.0 버전부터 기본적으로 _.chunk ()를 지원합니다 .

let data = ["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13"];
_.chunk(data, 4);
// [
//   ["a1", "a2", "a3", "a4"],
//   ["a5", "a6", "a7", "a8"],
//   ["a9", "a10", "a11", "a12"],
//   ["a13"]
// ]

이것을 시도하는 것이 훨씬 더 실용적입니다 (예를 들어, 각 하위 배열의 컨테이너가 될 항목의 양에 따라 배열을 분할하려는 경우).

function chunk(arr, start, amount){
    var result = [], 
        i, 
        start = start || 0, 
        amount = amount || 500, 
        len = arr.length;

    do {
        //console.log('appending ', start, '-', start + amount, 'of ', len, '.');
        result.push(arr.slice(start, start+amount));
        start += amount;

    } while (start< len);

    return result;
};

귀하의 경우에 사용 :

var arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],
    chunked = chunk(arr, 0, Math.floor(arr.length/3)); //to get 4 nested arrays

console.log(chunked);

다른 경우 :

var arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],
    chunked = chunk(arr, 0, 3); // to get 6 nested arrays each containing maximum of 3 items

console.log(chunked);

참고 URL : https://stackoverflow.com/questions/8566667/split-javascript-array-in-chunks-using-lodash

반응형