Как разделить один объект с массивом в нем на несколько объектов - PullRequest
0 голосов
/ 25 сентября 2019

Я хочу знать, есть ли возможность разбить объект на несколько объектов.У меня есть массив объектов, в котором есть другой массив, и мне было интересно, можно ли разделить эти объекты для каждого объекта во внутреннем массиве.Что-то вроде:

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 ()}, но не думаю, что он будет работать с каждым объектом

1 Ответ

0 голосов
/ 26 сентября 2019

Вы были на правильном пути в соответствии с описанием в вашем посте.Вы должны циклически просмотреть исходный объект и внутри каждой итерации выполнить цикл по массиву 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...