本机打字稿键名对象替换

时间:2019-06-03 14:34:30

标签: typescript

我正在使用来自Web服务的JSON,并且该结构具有所有键名,单词之间有空格。

示例:

"Payment": {
"seller name": "Seller Name",
"currency": "USD",
"pending amount": "400.78",
"total amount": "699.44"
 }

如您所见,“卖方名称”,“待处理金额”:和“总计”中都有空格。如何将这些键名转换为类似这样的内容:

“卖家名称” =“卖家名称”。

我有一个包含800个条件相同的对象的数组,我需要找到一种有效的方法来做到这一点。

我尝试过:

loadedData是来自ERP的JSON,而mapedList是具有正确格式的对象列表。

  let mappedReport: reportERP;

  for (let i = 0; i < this.loadedData; i++) {    
    mappedReport = {
      seller_name : this.loadedData[i]['seller name'],
      currency: this.loadedData[i]['currency'],
      pending_amount: this.loadedData[i]['pending amount'],
      total_amount: this.loadedData[i]['total amount']
    };      
    this.mappedList.push(mappedReport);

  }

2 个答案:

答案 0 :(得分:1)

实际上我的一个朋友也在处理这种情况, 看看这个解决方案https://stackblitz.com/edit/beautify-keynames 我只是寻找对象的所有属性,并为此替换所有空格(在这种情况下),然后将其全部分割并用下划线加入。然后,如果属性的值是一个对象,则每次找到一个对象值时,我都会递归调用它自己

答案 1 :(得分:0)

这是一个TypeScript示例,用下划线替换每个空白字符:

const input = [{
    "seller name": "Seller Name",
    "currency": "USD",
    "pending amount": "400.78",
    "total amount": "699.44"
}];

const output = input.map((obj: any) =>
    Object.getOwnPropertyNames(obj).reduce((acc: any, key) => {
        acc[key.replace(/\s/g, "_")] = obj[key];
        return acc;
    }, {})
);

演示:

const input = [{
    "seller name": "Seller Name",
    "currency": "USD",
    "pending amount": "400.78",
    "total amount": "699.44"
}];

const output = input.map(obj =>
    Object.getOwnPropertyNames(obj).reduce((acc, key) => {
        acc[key.replace(/\s/g, "_")] = obj[key];
        return acc;
    }, {})
);

console.log(output);

如果要修改原始对象而不创建对象的副本,则可以使用以下代码段:

input.forEach((obj: any) => {
    Object.getOwnPropertyNames(obj).forEach(key => {
        const convertedKey = key.replace(/\s/g, "_");
        if (convertedKey !== key) {
            obj[convertedKey] = obj[key];
            delete obj[key];
        }
    });
});