如何用JavaScript将多维对象Reduce为指定格式的字符串
问题:将对象转换为指定格式字符串
给定对象:
obj = { "zozo": { "buys": "6", "sells": "9" }, "zaza": { "buys": "5", "sells": "2" } }
需要将其转换为字符串:zozo: buys(6) sells(9), zaza: buys(5) sells(2)
现有代码:
obj = { "zozo": { "buys": "6", "sells": "9" }, "zaza": { "buys": "5", "sells": "2" } } res = Object.entries(obj).reduce((x,y) => `${x}, ${y[0]}: buys(${y[1].buys}) sells(${y[1].sells})`, ''); console.log(res);
输出结果为:, zozo: buys(6) sells(9), zaza: buys(5) sells(2),开头多了一个逗号,原因是传入空字符串作为reduce的初始值,导致第一次拼接时会在空字符串后加逗号和第一个元素。
解决方案
方法1:使用map() + join()(推荐)
这种方法逻辑更直观,先将每个键值对转换成目标格式的字符串,再用, 连接所有结果,完全避免多余前缀:
const obj = { "zozo": { "buys": "6", "sells": "9" }, "zaza": { "buys": "5", "sells": "2" } }; const res = Object.entries(obj) .map(([name, data]) => `${name}: buys(${data.buys}) sells(${data.sells})`) .join(', '); console.log(res); // 输出:zozo: buys(6) sells(9), zaza: buys(5) sells(2)
方法2:修正reduce()的用法
通过判断当前元素的索引,避免第一个元素前添加逗号:
const obj = { "zozo": { "buys": "6", "sells": "9" }, "zaza": { "buys": "5", "sells": "2" } }; const res = Object.entries(obj).reduce((acc, [name, data], index) => { const itemStr = `${name}: buys(${data.buys}) sells(${data.sells})`; return index === 0 ? itemStr : `${acc}, ${itemStr}`; }, ''); console.log(res);
方法3:拆分第一个元素再拼接
适合需要处理空对象的场景,先取出第一个元素作为初始值,再循环拼接后续元素:
const obj = { "zozo": { "buys": "6", "sells": "9" }, "zaza": { "buys": "5", "sells": "2" } }; const entries = Object.entries(obj); let res = ''; if (entries.length > 0) { const [firstName, firstData] = entries[0]; res = `${firstName}: buys(${firstData.buys}) sells(${firstData.sells})`; for (let i = 1; i < entries.length; i++) { const [name, data] = entries[i]; res += `, ${name}: buys(${data.buys}) sells(${data.sells})`; } } console.log(res);
内容的提问来源于stack exchange,提问作者vulpinus
相关产品推荐
相关产品推荐

