首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按顺序将对象添加到对象数组中

按顺序将对象添加到对象数组中
EN

Stack Overflow用户
提问于 2020-09-29 22:08:14
回答 2查看 60关注 0票数 0

我想知道是否有一种方法可以根据值动态地将对象添加到对象数组中?例如,我有一个对象数组:

代码语言:javascript
运行
复制
[
    {category:A, num:5}, 
    {category:B, num:2}
] 

我想创建另一个对象数组,其中对象是相同的,但根据num的值进行重复(因此类别A重复5次,类别B重复2次):

代码语言:javascript
运行
复制
[
    {category:A, num:5, repeated:1},
    {category:A, num:5, repeated:2},
    {category:A, num:5, repeated:3},
    {category:A, num:5, repeated:4},
    {category:A, num:5, repeated:5},
    {category:B, num:2, repeated:1}, 
    {category:B, num:2, repeated:2}
]

我尝试过map、forEach、for循环,但都不起作用。我是javascript的新手,有人能帮上忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-29 22:25:35

您可以使用flatMapmap的组合来完成此操作

代码语言:javascript
运行
复制
var input = [
    {category:"A", num:5}, 
    {category:"B", num:2}
] ;

var result = input.flatMap(e => [...new Array(e.num)].map( (x,i) => ({
    category:e.category,
    num: e.num,
    repeated: i+1
})));
console.log(result);

票数 1
EN

Stack Overflow用户

发布于 2020-09-29 22:25:05

您可以使用flatMap来完成此操作-

代码语言:javascript
运行
复制
const repeat = ({ num = 0, ...t }) =>
  num === 0
    ? []
    : [ ...repeat({ ...t, num: num - 1 }), { ...t, num, repeated: num } ]

const input = 
  [ { category: "A", num: 5}, { category: "B", num: 2 } ]
  
const output =
  input.flatMap(repeat)
  
console.log(output)

输出-

代码语言:javascript
运行
复制
[
  { category: "A", num: 1, repeated: 1 },
  { category: "A", num: 2, repeated: 2 },
  { category: "A", num: 3, repeated: 3 },
  { category: "A", num: 4, repeated: 4 },
  { category: "A", num: 5, repeated: 5 },
  { category: "B", num: 1, repeated: 1 },
  { category: "B", num: 2, repeated: 2 }
]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64121355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档