You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript的groupBy()在HTML中展示分组后的数组?

解决JavaScript分组后对象显示为[object Object]的问题

嘿,这个问题我太熟悉了!你之所以看到[object Object]而不是预期的分组结构,是因为直接把JavaScript对象和字符串拼接时,JS会自动调用对象的toString()方法——而默认情况下,这个方法返回的就是[object Object],完全看不出内部结构。

快速解决方法

要把对象的真实内容展示出来,你需要用JSON.stringify()把对象转换成可读性强的JSON字符串,再搭配<pre>标签来保留格式,让结构清晰直观。修改你设置div.innerHTML的代码:

div.innerHTML = 'groupedByLocation: <pre>' + JSON.stringify(groupedByLocation, null, 2) + '</pre>';
  • <pre>标签会保留字符串的换行和缩进,避免内容挤成一团;
  • JSON.stringify的第三个参数2表示用2个空格缩进,让分组的层级关系一目了然;第二个参数null表示我们不需要过滤任何属性,全部展示。

顺便优化控制台输出

你控制台那行代码console.log('groupedByLocation' + groupedByLocation)也会出现同样的问题,建议改成用逗号分隔,这样控制台能直接展开对象查看细节:

console.log('groupedByLocation', groupedByLocation)

完整可运行代码

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>JSON Test</title>
</head>
<body>
 <div id="myData"></div>

 <script>
const events = [{
 time: '12:00', location: 'mall'
}, {
 time: '9:00', location: 'store'
}, {
 time: '9:00', location: 'mall'
}, {
 time: '12:00', location: 'store'
}, {
 time: '12:00', location: 'market'
},]

Array.prototype.groupBy = function(prop) {
 return this.reduce(function(groups, item) {
 const val = item[prop]
 groups[val] = groups[val] || []
 groups[val].push(item)
 return groups
 }, {})
}

const groupedByLocation = events.groupBy('location')
console.log('groupedByLocation', groupedByLocation)

var mainContainer = document.getElementById("myData");
var div = document.createElement("div");
div.innerHTML = 'groupedByLocation: <pre>' + JSON.stringify(groupedByLocation, null, 2) + '</pre>';
mainContainer.appendChild(div);
 </script>
</body>
</html>

这样修改后,页面上就能清晰显示你期望的分组结构啦!

内容的提问来源于stack exchange,提问作者marialaustsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:47:35