@AlexKindGeek

Как объекты, состоящие из нескольких свойств, разделить на несколько объектов из одного свойства?

Есть массив объектов, внутри которых есть ещё массивы объектов:

[
  { or: [{ match: {} }, { match: {} }] },
  { or: [{ in: {} }, { in: {} }, { in: {} }] },
  {
    or: [{ in: {}, match: {} }, { match: {} }], // Как есть сейчас
  },
];

Если в объектах вложенных массивов есть более одного свойства, то нужно эти объекты разделить так, чтобы в новых объектах было по одному свойству. То есть, в результате должно выйти:

[
  { or: [{ match: {} }, { match: {} }] },
  { or: [{ in: {} }, { in: {} }, { in: {} }] },
  {
    or: [{ in: {} }, { match: {} }, { match: {} }], // Вот как должно быть
  },
];

Как я пробовал сделать:

arr.map(el => {
  return Object.entries(el).map(([key, value]) => {
    value.map(el => {
      if(Object.keys(el).length > 2) {
        ... не знаю как делать дальше
      }
    })
  })
})
  • Вопрос задан
  • 483 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
arr.map(n => Object
  .entries(n)
  .reduce((acc, [ k, v ]) => (
    acc[k] = v
      .flatMap(Object.entries)
      .map(([ k, v ]) => ({ [k]: v })),
    acc
  ), {})
)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AngReload
@AngReload
Кратко о себе
let input = [
	{
		in: {},
		match: {}
	},
	{
		match: {}
	}
]


for (let i = 0; i < input.length; i++) {
	let obj = input[i]
	let keys = Object.keys(obj)
	while (keys.length > 1) {
		let key = keys.pop()
		input.push({
			[key]: obj[key]
		})
		delete obj[key]
	}
}

console.log(input)
/*
[
	{
		in: {}
	},
	{
		match: {}
	},
	{
		match: {}
	}
]
*/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы