【发布时间】:2020-07-22 15:18:47
【问题描述】:
我正在循环浏览一组博客文章,首先将博客作者的用户名和 ID 推送到一个新的数组数组中,然后计算每个作者的博客数量。下面的代码实现了这一点;但是,在新数组中,用户名和作者 ID 不再是数组中单独的项目,而是似乎连接成一个字符串。我需要将它们作为单独的项目保留,因为我需要单独使用它们;我该如何修改结果以实现这一目标?
var countAuthors = [];
blogAuthors = await Blog.find().populate('authors');
blogAuthors.forEach(function(blogAuthor){
countAuthors.push([blogAuthor.author.username, blogAuthor.author.id]);
})
console.log(countAuthors);
// Outputs as separate array items, as expected:
// [ 'author1', 5d7eed028c298b424b3fb5f1 ],
// [ 'author2', 5dd8aa254d74b30017dbfdd3 ],
var result = {};
countAuthors.forEach(function(x) {
result[x] = (result[x] || 0) + 1;
});
console.log(result);
// Username and author ID become a single string and cannot be accessed as separate array items
// 'author1,5d7eed028c298b424b3fb5f1': 15,
// 'author2,5dd8aa254d74b30017dbfdd3': 2,
更新:
也许我可以进一步解释为什么要这样做。我的目标是一个表格,其中显示博客作者的姓名以及他们撰写的博客数量。但是,我还希望作者姓名链接到他们的个人资料页面,这需要 blogAuthor.author.id 这样做。因此,在执行计数后,我仍然需要能够分别访问作者用户名和 ID。谢谢
【问题讨论】:
-
我不确定你在期待什么。
result[x] = ...正在尝试设置result的属性x,在这种情况下x是一个数组。您想要一个由数组keyed 的对象吗?这样的事情在javascript中是不可能的。 -
或者你想要一个同时拥有 author 和 id 键的对象?换句话说
{ "author1": 15, "author1,5d7eed028c298b424b3fb5f1": 15, "author2": 2, "5dd8aa254d74b30017dbfdd3": 2 }?
标签: javascript arrays foreach