使用Sequelize时,如何通过JavaScript Reduce生成指定JSON格式输出?
问题解决:按block.ok值分组用户ID
原代码存在的问题
test是对象类型,不能直接调用数组的reduce方法,需先转为值数组- 分组逻辑完全颠倒:原代码用
user作为分组键,收集block.ok值,而需求是用block.ok作为键,收集对应的user值 - 最终拼接时未将数组转为逗号分隔的字符串
修正后的代码
const test = { one: { 'user': '2', 'status': '1', block: { 'ok': 'false' } }, two: { 'user': '3', 'status': '1', block: { 'ok': 'false' } }, three: { 'user': '4', 'status': '1', block: { 'ok': 'false' } }, five: { 'user': '5', 'status': '0', block: { 'ok': 'true' } } }; // 转换对象为值数组后执行分组 const grouped = Object.values(test).reduce((groups, item) => { const groupKey = item.block.ok; // 初始化或追加当前用户ID到对应分组 groups[groupKey] = [...(groups[groupKey] || []), item.user]; return groups; }, {}); // 格式化为要求的字符串输出 const resultText = Object.entries(grouped).map(([key, ids]) => `${key}: ${ids.join(',')}`).join('\n'); console.log(resultText);
输出结果
false: 2,3,4 true: 5
说明
原数据中前3项的block.ok为'false',对应用户ID 2、3、4;最后一项block.ok为'true',对应用户ID 5。若你需要的输出是true: 2,3,4、false:5,只需将分组键改为item.block.ok === 'false' ? 'true' : 'false'即可。
内容的提问来源于stack exchange,提问作者user21042774
相关产品推荐
相关产品推荐

