首页 > 解决方案 > .map 对象标题数组到基于票数的新数组

问题描述

我有一个看起来像这样的对象数组。

array = [
  {
    title: Title1,
    votes: 2,
  },
  {
    title: Title2,
    votes: 1,
  },
  {
    title: Title3,
    votes: 1,
  },
];

我想要做的是使用 .map 将标题推送到一个新数组中,但基于该对象的票数。

对于此示例,它看起来像这样。

newArray = [Title1, Title1, Title2, Title3]

在我使用 React 时,使用 .map 是最好的方法。

标签: javascriptarraysreactjsobjectarray.prototype.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 );


推荐阅读