首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >映射JS对象并将参数合并到子对象中

映射JS对象并将参数合并到子对象中
EN

Stack Overflow用户
提问于 2020-03-31 03:20:50
回答 2查看 45关注 0票数 0

我在映射JS对象和将数据从一个参数合并到另一个参数的子对象时遇到了困难。

假设我有以下JSON:

代码语言:javascript
复制
const data = [
  {
    "difficulty": "Easy",
    "levels": [
      {
        "id": 0,
        "title": "Training",
        "description": "First training level."
      },
      {
        "id": 1,
        "title": "Story",
        "description": "First story level."
      }
    ]
  },
  {
    "difficulty": "Medium",
    "levels": [
      {
        "id": 2,
        "title": "Training",
        "description": "First training level at medium difficulty."
      }
    ]
  }
];

我想要操作这个来返回:

代码语言:javascript
复制
[
  {
    "id": 0,
    "title": "Training",
    "description": "First training level.",
    "difficulty": "Easy"
  },
  {
    "id": 1,
    "title": "Story",
    "description": "First story level.",
    "difficulty": "Easy"
  },
  {
    "id": 2,
    "title": "Training",
    "description": "First training level at medium difficulty.",
    "difficulty": "Medium"
  }
];

我试过了:

代码语言:javascript
复制
const result = data.map(item => {
  const { difficulty, levels } = item;
  return levels.map(level => ({ ...level, difficulty }));
});

但我的结论是:

代码语言:javascript
复制
[
   [
      {
         "id": 0,
         "title": "Training",
         "description": "First training level.",
         "difficulty": "Easy"
      },
      {
         "id": 1,
         "title": "Story",
         "description": "First story level.",
         "difficulty": "Easy"
      }
   ],
   [
      {
         "id": 2,
         "title": "Training",
         "description": "First training level at medium difficulty.",
         "difficulty": "Medium"
      }
   ]
]

我只想返回所有添加了difficultylevels

EN

回答 2

Stack Overflow用户

发布于 2020-03-31 03:40:12

这是因为您使用了嵌套的.map函数。每个.map函数返回一个数组。要避免这种情况,您可以使用.flat()方法来减少嵌套,您的解决方案可以转换为以下形式

代码语言:javascript
复制
const result = data.map(item => {
      const { difficulty, levels } = item;
      return levels.map(level => ({ ...level, difficulty }));
      }).flat();

默认情况下,它压缩为1个嵌套数组。更多信息可以在这里找到:Array.prototype.flat()

但在处理大型数据集合时要小心,因为它会遍历数组,因此会降低性能。

不含.map方法的UPD型解

代码语言:javascript
复制
function mapDifficultyToLevels(data) {
  const result = []
  data.forEach(item => {
    item.levels.forEach(level => {
      result.push({
        difficulty: item.difficulty,
        ...level
      })
    })
  })
  return result
}
票数 2
EN

Stack Overflow用户

发布于 2020-03-31 04:15:15

使用map迭代级别数组并添加难度属性,使用flat()删除嵌套数组并将其展平为一个数组。

代码语言:javascript
复制
const data = [{"difficulty": "Easy", "levels": [{"id": 0,"title": "Training","description": "First training level."},{"id": 1,"title": "Story","description": "First story level."}] },{"difficulty": "Medium","levels": [ {"id": 2, "title": "Training","description": "First training level at medium difficulty."}]}];
let result=data.map( obj =>obj.levels.map(level=>{
level["difficulty"]=obj.difficulty;return level}
)).flat();
console.log(result);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60937953

复制
相关文章

相似问题

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