根据另一个对象数组替换键

时间:2020-08-13 08:46:51

标签: javascript

我有两个对象数组,基于一个数组,我需要替换另一个数组的键。尝试使用Object.Keys(),但无法实现。请建议

// **Input :**
let sim = {
  "header": [{
      "VKORG": "1000",
      "VTWEG": "10"
    },
    {
      "VKORG": "1000",
      "VTWEG": "20"
    }
  ]
}
// **Reference Array:**
let columns = [{
      "FIELD": "VKORG",
      "FIELD_DESC": "Sales Organization"
    },
    {
      "FIELD": "VTWEG",
      "FIELD_DESC": "Distribution Channel"
    }
  ]

/// **Code I tried** 


for (let i = 0; i < sim.header.length; i++) {

  if (Object.keys(sim[i].header) === Object.keys(columns[i].header)) {
    sim[i].header[columns[i].header.FIELD_DESC] = sim[i].header[Object.keys(sim[i].header)]
  }
}

console.log(sim);

预期输出:

output = {
  "header": [{
      "Sales Organization": "1000",
      "Distribution Channel: "
      10 " 

    },
    {
      "Sales Organization": "1000",
      "Distribution Channel": "20"

    }
  ]
}

2 个答案:

答案 0 :(得分:2)

不是完美的,但是试试这个

TableName

答案 1 :(得分:1)

这里是使用Map和array.map的方法。我们将这些列存储为Map中的键值对,然后遍历sim.header时,只需从映射中获取特定键的值并对其进行更新即可。

let sim = {
  "header": [{
      "VKORG": "1000",
      "VTWEG": "10"
    },
    {
      "VKORG": "1000",
      "VTWEG": "20"
    }
  ]
}

let columns = [{
      "FIELD": "VKORG",
      "FIELD_DESC": "Sales Organization"
    },
    {
      "FIELD": "VTWEG",
      "FIELD_DESC": "Distribution Channel"
    }
]

var map = new Map();
columns.forEach(obj => {
   map.set(obj.FIELD, obj.FIELD_DESC);
})

sim.header = sim.header.map(obj => {
var tempObj = {};
    Object.keys(obj).forEach(key => {
       tempObj[map.get(key)] = obj[key]
    })
    return tempObj;
})

console.log(sim);