JavaScript数组处理:如何正确拼接金额字符串且无末尾加号
解决商品价格字符串拼接问题
先给你最简洁的解法:用map把每个商品转换为带$的价格字符串,再用join('+')拼接,直接避免末尾多余的+:
const input = [{id: 1, amount: 20}, {id: 2, amount: 40}, {id: 3, amount: 90}] const output = input?.map(item => `$${item.amount}`).join('+') console.log(output) // 输出 "$20+$40+$90"
如果一定要用reduce实现,有两种可行思路:
- 思路一:在
reduce中判断当前元素是否为最后一个,仅对非最后一个元素追加+:
const output = input?.reduce((acc, curr, index, arr) => { acc += `$${curr.amount}`; // 不是最后一项才加分隔符 if (index !== arr.length - 1) { acc += '+'; } return acc; }, '')
- 思路二:先拼接所有带
+的字符串,再移除最后一个+(注意判断数组为空的情况,避免slice报错):
const output = input?.length ? input.reduce((acc, curr) => acc + `$${curr.amount}+`, '').slice(0, -1) : ''
关于你说运行原代码得到金额总和$150的问题:按你贴出的代码来看,初始值是空字符串,应该是字符串拼接而非数字相加。大概率是你实际运行的代码和贴出的不一致——比如把初始值写成了0,或者拼接时漏了模板字符串符号,直接累加curr.amount导致数字相加,你可以检查下代码的初始值和拼接逻辑。
内容的提问来源于stack exchange,提问作者dev
相关产品推荐
相关产品推荐

