반응형
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
반응형
'programing tip' 카테고리의 다른 글
Python에서 []없이 목록 이해 (0) | 2020.10.23 |
---|---|
자바에서 날짜에 요일 추가 (0) | 2020.10.23 |
SQL Server 날짜 시간을 더 짧은 날짜 형식으로 변환 (0) | 2020.10.23 |
"UNC 경로가 지원되지 않습니다"라는 메시지없이 네트워크 공유에서 배치 파일을 실행하는 방법은 무엇입니까? (0) | 2020.10.23 |
클릭시 특정 div로 부드럽게 스크롤 (0) | 2020.10.23 |