【问题标题】:How to split one object with an array in it to multiple objects如何将一个包含数组的对象拆分为多个对象
【发布时间】:2023-03-22 13:41:01
【问题描述】:

我想知道是否可以将一个对象拆分为多个对象。我有一个对象数组,其中有另一个数组,我想知道是否可以为内部数组中的每个对象拆分这些对象。比如:

obj1 = [{
  a: 1,
  b: [{c: 2},{d: 3}],
  e: 4
}]

obj2 =[
  {
    a: 1,
    b: [{c: 2}],
    e: 4
  },
  {
    a: 1,
    b: [{d: 3}],
    e: 4
  }
]

对象总是以这种形式存在,无论是一个对象还是数百个对象。虽然某些对象中可能有更多字段,但只有一个字段带有数组。目前,我正在映射原始数组,然后在b 数组中再次映射以获取其中的每个对象。但是,我不知道从那里去哪里,因为该地图的返回对象只是原始数组。我不知道如何拆分 b 数组并将其与原始数组映射。我想到了 {...orig, b: map()} 但我认为它不适用于每个对象

【问题讨论】:

  • 请说明您的对象的结构是否总是这样,以及您迄今为止为使其工作所做的尝试。
  • 欢迎来到 Stackoverflow,请阅读How To Ask。特别关注How To Create MCVE。确保使用适当的标签(编程语言、相关技术等)标记您的问题。您在发布一个好问题上付出的努力越多:一个易于阅读、理解并且是 on topic 的问题 - 它吸引相关人员的机会就越高,您将更快地获得帮助。祝你好运!
  • @GhassenLouhaichi 编辑了我尝试过的内容。我想过通过它进行映射,但很难将映射重新组合在一起
  • 除了ab 之外,您的源对象中是否还有其他属性?另外,你的源数组中可以有多个元素吗?
  • @GhassenLouhaichi 源对象中可以有更多元素,源数组中可以有更多元素。但是,我只想拆分 b 如果它有多个元素

标签: javascript list object split


【解决方案1】:

根据您帖子中的描述,您走在正确的轨道上。您必须循环遍历源对象,并在每次迭代中循环遍历 b 数组以提取每个元素并将其与新对象中的源迭代元素一起推送到目标数组中。

var source = [{
    a: 1,
    b: [{ c: 2 }, { d: 3 }],
    e: 4
}];

// define target as an array
var target = [];

// loop through source
source.forEach((srcElement) => {
    // loop through `b` array attribute
    srcElement.b.forEach((bElement) => {
        // push object into target with source element attributes
        // and current `b` element wrapped into an array
        target.push({
            ...srcElement,
            b: [bElement]
        });
    });
});

console.log(target);

注意:此解决方案假定在源对象的每次迭代中,b 属性存在并且类型为 Array

【讨论】:

  • 谢谢!保存新对象的部分让我发疯了!
猜你喜欢
  • 2019-04-23
  • 1970-01-01
  • 1970-01-01
  • 2017-09-25
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 2018-10-06
  • 1970-01-01
相关资源
最近更新 更多