const str = "😀".repeat(10) function fold_graphemes(str, state, fun) { let arr while(null !== (arr = pop_grapheme(str))) { state = fun(arr[0], state) str = arr[1] } return state } function pop_grapheme(str) { if (str === "") return null; const segmenter = new Intl.Segmenter(); const grapheme = segmenter.segment(str)[Symbol.iterator]().next().value.segment; return [grapheme, str.slice(grapheme.length)] } let sum = 0 for(let i = 0; i < 100000; ++i) { sum += fold_graphemes(str, 0, (a, b) => b + a.length) } console.log(sum)