javascript - .map 对象标题数组到基于票数的新数组
问题描述
我有一个看起来像这样的对象数组。
array = [
{
title: Title1,
votes: 2,
},
{
title: Title2,
votes: 1,
},
{
title: Title3,
votes: 1,
},
];
我想要做的是使用 .map 将标题推送到一个新数组中,但基于该对象的票数。
对于此示例,它看起来像这样。
newArray = [Title1, Title1, Title2, Title3]
在我使用 React 时,使用 .map 是最好的方法。
解决方案
不,Array.prototype.map不是最好的。当您想要一个与原始数组长度相同的新数组时,它很有用。您可以使用Array.prototype.reduce实现您想要做的事情:
const array = [ { title: 'Title1', votes: 2 }, { title: 'Title2', votes: 1 }, { title: 'Title3', votes: 1 } ];
const result = array.reduce( (res, el) => res.concat( Array( el.votes ).fill( el.title ) ), [] );
console.log( result );
目前还有一个关于 Array.prototype.flatMap函数的提议,该函数非常适合您的情况,但还没有太多浏览器支持:
const array = [ { title: 'Title1', votes: 2 }, { title: 'Title2', votes: 1 }, { title: 'Title3', votes: 1 } ];
const result = array.flatMap( el => Array( el.votes ).fill( el.title ) );
console.log( result );
推荐阅读
- python - 查找字符串中的连续字符+它们的开始和结束索引(python)
- syntax - 这种语法描述语言描述了什么?它有名称或标准吗?
- xml - 删除 xmlns: 属性
- reactjs - 如何在反应 redux 钩子中为多个参数设置状态
- java - 微服务通信问题
- reactjs - 有什么方法可以在反应中重用节点模块吗?
- visual-studio-code - Visual Studio Code Jupyter 不显示亚洲语言字符
- flutter - 图像选择器在颤振项目中不起作用
- spring - 使用 SSH 密钥访问 GIT 存储库的 Spring 云配置服务器需要进行身份验证,但尚未注册 CredentialsProvider
- http - http 请求适用于 .pdf 但损坏 .docx 和 .xlsx 文件