Javascript根据映射

时间:2018-03-14 21:44:46

标签: javascript

我有一个来自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",
}]

https://jsfiddle.net/hbg4sfqh/7/

2 个答案:

答案 0 :(得分:1)

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

以下是您的示例的简单实现:



const 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",
}];

const nameMap = {
  SubmissionID: 'SubmissionIdentifier',
  MetaCreatedDate: 'CreationDate',
  Program: 'ProgramName',
  ViewedByInvestigator: 'Viewed'
}

function renameKeys(obj, map) {
    const newObj = {};
    for (let key in obj) {
        newObj[map[key]] = obj[key];
    }
    
    return newObj;
}

console.log(obj.map(item => renameKeys(item, nameMap)));




我还要注意,如果您碰巧使用了lodash库,您也可以使用它的_.mapKeys方法来执行此操作。

答案 1 :(得分:0)

我将使用.map()函数来更改密钥名称。输入数据将保持不变。希望这会有所帮助。



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",
}]

var output = obj.map(element => ({
  SubmissionIdentifier: element.SubmissionID,
  CreationDate: element.MetaCreatedDate,
  ProgramName: element.Program,
  Viewed: element.ViewedByInvestigator
}));