基于映射的Javascript对象键名转换

基于映射的Javascript对象键名转换,javascript,Javascript,我有一个来自Source1的javascript对象,我无法更改其本机结构或命名约定。我正在使用这些数据输入第三方插件,以生成一些图表数据。然而,这个插件使用键名作为图表上的标识符,它们不够描述性或清晰 我试图通过一个转换函数运行该对象,在该函数中,它将把所有键名更改为它们定义的等价项 下面是我正在尝试做的一个例子: var obj = [{ SubmissionID: "28935", MetaCreatedDate: "12 Mar 2018", Program: "Brand

我有一个来自
Source1
的javascript对象,我无法更改其本机结构或命名约定。我正在使用这些数据输入第三方插件,以生成一些图表数据。然而,这个插件使用键名作为图表上的标识符,它们不够描述性或清晰

我试图通过一个转换函数运行该对象,在该函数中,它将把所有键名更改为它们定义的等价项

下面是我正在尝试做的一个例子:

var obj = [{
  SubmissionID: "28935",
  MetaCreatedDate: "12 Mar 2018",
  Program: "Brand Risk Management",
  ViewedByInvestigator: "No",
},
{
  SubmissionID: "28936",
  MetaCreatedDate: "12 Mar 2018",
  Program: "Brand Risk Management",
  ViewedByInvestigator: "Yes",
}]

function convertNames(obj){

  // Converted names
    var map = [{
    SubmissionID: 'SubmissionIdentifier',
    MetaCreatedDate: 'CreationDate',
    Program: 'ProgramName',
    ViewedByInvestigator: 'Viewed'
  }];

  // Loop through the object and convert all key names to their equivalent

  for(var prop in obj){
    // Convert Here

    }

  return obj;
}
期望输出:

[{
  SubmissionIdentifier: "28935",
  CreationDate: "12 Mar 2018",
  ProgramName: "Brand Risk Management",
  Viewed: "No",
},
{
  SubmissionIdentifier: "28936",
  CreationDate: "12 Mar 2018",
  ProgramName: "Brand Risk Management",
  Viewed: "Yes",
}]

我将结合
.map
数组方法和一个函数来转换键名以获得所需的结果。要转换键名,您需要使用括号表示法,因此类似于:
newObj[keyMap[oldKey]]=oldObj[oldKey]
应该可以工作

下面是您的示例的一个简单实现:

const obj=[{
SubmissionID:“28935”,
元创建日期:“2018年3月12日”,
项目:“品牌风险管理”,
调查员查看:“否”,
}, {
SubmissionID:“28936”,
元创建日期:“2018年3月12日”,
项目:“品牌风险管理”,
调查员查看:“是”,
}];
常量名称映射={
SubmissionID:“SubmissionIdentifier”,
MetaCreatedDate:“CreationDate”,
程序:“程序名”,
调查员查看:“已查看”
}
功能重命名键(obj、map){
const newObj={};
用于(输入obj){
newObj[map[key]=obj[key];
}
返回newObj;
}
log(obj.map(item=>renameKeys(item,nameMap))我将使用.map()函数更改键名。输入数据将保持不变。希望这有帮助

var obj=[{
SubmissionID:“28935”,
元创建日期:“2018年3月12日”,
项目:“品牌风险管理”,
调查员查看:“否”,
},
{
SubmissionID:“28936”,
元创建日期:“2018年3月12日”,
项目:“品牌风险管理”,
调查员查看:“是”,
}]
变量输出=对象映射(元素=>({
SubmissionIdentifier:element.SubmissionID,
CreationDate:element.MetaCreatedDate,
程序名:element.Program,
查看:element.ViewedByInvestor

}));data=data.map(item=>renameKeys(item,nameMap))。有什么想法吗?箭头语法是es6+,所以请尝试使用旧的函数语法,例如:
data=data.map(函数(项){return renameKeys(项,名称映射)})
。但是,
map
方法也可能不在任何地方都受支持,因此如果是这种情况,则需要对其进行多边形填充,或者只使用普通for循环。