JavaScript单行reduce语句失效,如何修复?
问题原因与解决方法
你的问题核心是reduce回调的返回值错误:
- 多行写法里,执行
splice后你明确返回了累加器finalar,所以每次迭代时累加器都是同一个数组,后续操作能正常基于这个数组进行。 - 单行写法里,你直接返回了
finalar.splice(...)的结果,但splice方法返回的是被删除元素组成的数组(这里是插入操作,所以返回空数组),这就导致下一轮迭代时累加器变成了空数组,后续的splice自然无法正确执行。另外你原单行代码里splice的第一个参数多套了一层数组[matches[indx]-1],这也是多余的,splice的第一个参数需要的是数字索引,不是数组。
修复后的单行reduce写法
用逗号运算符先执行splice操作,再返回累加器finalar即可:
function order(words){ let regex = /\d+/g; let matches = words.match(regex) return words.split(' ').reduce((finalar, element, indx) => (finalar.splice(matches[indx] - 1, 0, element), finalar), []).join(' '); } console.log(order("is2 Thi1s T4est 3a")); // 输出: Thi1s is2 3a T4est
补充说明
逗号运算符会依次执行逗号前后的表达式,最后返回最后一个表达式的结果,这里就是返回finalar,保证累加器始终是初始创建的数组,让每一轮迭代都能基于正确的数组进行操作。
内容的提问来源于stack exchange,提问作者Chidambaram P
相关产品推荐
相关产品推荐

