解构对象数组(ES6)

时间:2019-10-22 18:03:13

标签: javascript arrays object ecmascript-6 destructuring

我想知道如何解构对象数组。我正在尝试从country数组中解构partner。项目要求partner是对象的数组,即使每个obj只能有一个伙伴国。

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}] })
);

我已经提到了Destructure object properties inside array for all elementsDestructuring an array of objects with es6,并且看起来如果不先转换数据就无法做到这一点。

任何帮助将不胜感激(并为被骗人道歉)。

2 个答案:

答案 0 :(得分:1)

由于同样简单的错误,我忽略了一个非常简单的答案:

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

数组中的每个项目不一定都具有“ country”属性。对于某些项目,partner只是一个空数组。以上解决了这个问题。

我同意,如果partner仅包含一个对象,则将其设为没有意义。但是,客户要求。

答案 1 :(得分:1)

当伙伴为空数组时,您只需使用默认值即可

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)