Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Run results for:
lodash vs Map
consolidate
Go to the benchmark
Embed
Embed Benchmark Result
Run details:
User agent:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36
Browser:
Chrome 135
Operating system:
Mac OS X 10.15.7
Device Platform:
Desktop
Date tested:
one year ago
Test name
Executions per second
Map
4096903.2 Ops/sec
lodash
561977.2 Ops/sec
HTML Preparation code:
<script src='https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js'></script>
Script Preparation code:
var body = { items: [ { goodsCode: 'A', quantity: 1, options: [ { goodsCode: 'X', quantity: 1, options: [ { goodsCode: 'Z', quantity: 2, }, ], }, ], }, { goodsCode: 'A', quantity: 2, options: [ { goodsCode: 'X', quantity: 2, options: [ { goodsCode: 'Z', quantity: 3, }, ], }, ], }, ], }
Tests:
Map
function consolidateCartItems({ items }) { const uniqItemsMap = items.reduce((acc, item) => { const prevItem = acc.get(item.goodsCode); if (prevItem) { const options = (prevItem.options ?? []).concat(item?.options ?? []); const hasOptions = options.length > 0; const newItem = { ...prevItem, quantity: prevItem.quantity + item.quantity, }; if (hasOptions) { newItem.options = consolidateCartItems({ items: options }); } acc.set(item.goodsCode, newItem); } else { acc.set(item.goodsCode, item); } return acc; }, new Map()); return [...uniqItemsMap.values()]; } consolidateCartItems(body)
lodash
function consolidateCartItems({ items }) { return ( _.chain(items) // goodsCode를 기준으로 그룹화 .groupBy('goodsCode') .map((group, goodsCode) => { // 그룹 내 전체 수량 합산 const quantity = _.sumBy(group, 'quantity'); // 옵션들을 한 곳에 모은 후 존재 여부 확인 const mergedOptions = _.chain(group) .flatMap('options') // 모든 옵션을 평탄화 .filter(Boolean) // null/undefined 필터링 .thru((opts) => opts.length > 0 ? consolidateCartItems({ items: opts }) // 재귀 병합 : undefined, ) .value(); // 병합된 항목 생성 (옵션은 있을 경우에만 포함) return { goodsCode, quantity, ...(mergedOptions ? { options: mergedOptions } : {}), }; }) .value() ); } consolidateCartItems(body)