如何在JavaScript中简化这一点?

如何在JavaScript中简化这一点?,javascript,Javascript,我想把一个对象转换成一个特殊的数组 以下是我的示例对象: const object = { details: 'Here are some details', info: 'Here is a bit of info', more: 'Wanna see more?', random: 'Title 4', random2: 'Title 5', ... } 我想要以下输出: [ { "tabLabel": "Some det

我想把一个对象转换成一个特殊的数组

以下是我的示例对象:

const object = {
  details: 'Here are some details',
  info: 'Here is a bit of info',
  more: 'Wanna see more?',
  random: 'Title 4',
  random2: 'Title 5',
  ...
 }
我想要以下输出:

[
  {
    "tabLabel": "Some details", // details 
    "tabContent": "Here are some details"
  },
  {
    "tabLabel": "Explanations", // info
    "tabContent": "Here is a bit of info"
  },
  {
    "tabLabel": "Continue your journey", // more
    "tabContent": "Wanna see more?"
  }
]
我采用的解决方案是:

const newObj = Object.entries(object).map(([key, val]) => {
  if (key === 'details') {
    dataArray.push({ tabLabel: "Some details", tabContent: val });
  }

  if (key === 'info') {
    dataArray.push({ tabLabel: 'Explanations', tabContent: val });
  }

  if (key === 'more') {
    dataArray.push({ tabLabel: 'Continue your journey', tabContent: val });
  }
});
我怎样才能做得更优雅呢

const object = {
  details: 'Here are some details',
  info: 'Here is a bit of info',
  more: 'Wanna see more?'
}
const signification = {
  details: "Some details",
  info: "Explanations",
  more: "Continue your journey"  
}
const array = Object.entries(object).map (x => {
    return {
    tabLabel: x[1],
    tabContent: signification[x[0]]
  }
})
console.log(array)
结果如下:

[{
  tabContent: "Some details",
  tabLabel: "Here are some details"
}, {
  tabContent: "Explanations",
  tabLabel: "Here is a bit of info"
}, {
  tabContent: "Continue your journey",
  tabLabel: "Wanna see more?"
}]
您只需要实现
含义
,他需要与
对象具有相同的长度

如何

const newObj = [ // In fact is an Array
  {
    "tabLabel": "Some details",
    "tabContent": object.details
  },
  {
    "tabLabel": "Explanations", // info
    "tabContent": object.info
  },
  {
    "tabLabel": "Continue your journey", // more
    "tabContent": object.more
  }
]

由于您需要映射到具体的键,因此不需要迭代,因此我认为可以通过这种方式清除映射。

您可以在JavaScript上使用映射,使代码更加清晰


const object = {
    details: 'Here are some details',
    info: 'Here is a bit of info',
    more: 'Wanna see more?',
    random: 'Title 4',
    random2: 'Title 5',
};

const label = new Map()
    .set('details', "Some details")
    .set('info', "Explanations")
    //so on
;

const array = Object.entries(object).map(([key, val]) => {
    return {
        tabLabel: label.get(key),
        tabContent: val
    };
})
console.log(array)
像这样的

const obj=
{详细信息:'这里有一些详细信息'
,info:“这里有一些信息”
,更多:“想看更多吗?”
} 
常量标签=
{详细信息:'一些详细信息'
,信息:'解释'
,更多:“继续你的旅程”
}
const newObj=Object.entries(obj.map)([k,v],i)=>({tabLabel:Labels[k],tabContent:v}))
console.log(newObj)

.as控制台包装{max height:100%!important;top:0;}
解决方案中的
dataArray
是什么?您将整体结果放置在哪里,
newObj
dataArray
?此外,不管怎样,您的解决方案不会产生您所说的想要的输出。您没有处理将
details
转换为
Some details
。提示:
const v={details:'Some details',…};d、 推送({tabLabel:v[key],…})
这取决于。。。“细节”、“信息”和“更多”--这些键特别吗?它们是硬编码的,不需要更改,还是易于配置?您需要本地化吗?在地图中,如果不执行forEach,您需要返回一个值。@T.J.Crowder!我编辑了答案,很抱歉造成混淆。你是对的,我需要对“tabLabel”值进行硬编码,因此在我看来,这实际上是最简单、最自然的解决方案。谢谢。我同意德尔的方法,但这种方法确实很有趣。感谢您花时间回答,它确实按预期工作,感谢您花时间,同意Del的解决方案,但我将整合您的解决方案,我想分离标签,这样会更干净