Уничтожение массива объектов (es6) - PullRequest
2 голосов
/ 22 октября 2019

Мне интересно, как уничтожить массив объектов. Я пытаюсь деструктурировать country из массива partner. Проект требует, чтобы partner был массивом объектов, даже если на объект должна быть только одна страна-партнер.

arr = [
   { title: "Title A",
     desc: "Desc A",
     role: {role_desc: "Role Desc A", role_name: "Role A"},
     partner: [{country: "Brazil", region: "SA"}]
   },
   { title: "Title B",
     desc: "Desc B",
     role: {role_desc: "Role Desc B", role_name: "Role B"},
     partner: [{country: "US", region: "NA"}]
   }
]

Я могу заполнить таблицус данными для всех полей, кроме partner.

arr.map(
  ({ title, desc, role: {role_name}, partner: [{country}] }) => 
  ({ title, desc, role: {role_name}, partner: [{country}] })
);

Я упоминал Разрушить свойства объекта внутри массива для всех элементов и Уничтожить массив объектов с помощью es6 , и похоже, что это невозможно сделать без предварительного преобразования данных.

Буду признателен за любую помощь (и извинения за обман).

Ответы [ 2 ]

1 голос
/ 22 октября 2019

Вы можете просто использовать значение по умолчанию, когда хотите обработать случай, когда партнер - пустой массив,

const arr = [{ title: "Title A",desc: "Desc A",role: {role_desc: "Role Desc A", role_name: "Role A"},partner: [{country: "Brazil", region: "SA"}]},{ title: "Title B",desc: "Desc B",role: {role_desc: "Role Desc B", role_name: "Role B"},partner: [{country: "US", region: "NA"}]},{ title: "Title C",desc: "Desc C",role: {role_desc: "Role Desc C", role_name: "Role C"},partner: []}]

const final = arr.map(
  ({ title, desc, role: {role_name}, partner}) => 
  ({ title, desc, role: {role_name}, partner:[ {country} = {country: undefined } ] })
);

console.log(final)

Принимая во внимание, что мы должны сделать наш код максимально читабельным, здесь это становится очень трудным для глаз, вместо того, чтобы пытаться сохранить одну дополнительную строку, мы должны выбратьчтобы сделать его более читабельным

const arr = [{ title: "Title A",desc: "Desc A",role: {role_desc: "Role Desc A", role_name: "Role A"},partner: [{country: "Brazil", region: "SA"}]},{ title: "Title B",desc: "Desc B",role: {role_desc: "Role Desc B", role_name: "Role B"},partner: [{country: "US", region: "NA"}]},{ title: "Title C",desc: "Desc C",role: {role_desc: "Role Desc C", role_name: "Role C"},partner: []}]

const final = arr.map(
  ({ title, desc, role: {role_name}, partner}) => {
     let country = partner[0] && partner[0].country || undefined
    return { title, desc, role: {role_name}, partner:[ {country}] }
  }
);

console.log(final)
1 голос
/ 22 октября 2019

Я пропустил очень простой ответ из-за одинаково простой ошибки:

arr.map(
  ({ title, desc, role: {role_name}, partner}) => 
  ({ title, desc, role: {role_name}, partner: (partner[0] && partner[0].country) || 'Undefined' })
);

Каждый элемент в массиве не обязательно имел свойство "страна". Для определенных элементов partner это просто пустой массив. Вышеуказанное исправило проблему.

Я согласен, что нет смысла делать partner массивом, если он будет когда-либо содержать только один объект. Требования клиента, однако.

...