根据第一个元素数组中的值更改对象数组中的键名

时间:2019-12-12 03:50:57

标签: javascript arrays json ecmascript-6

我有来自.csv文件的原始json,例如

[{
    "A": "CustomerCode",
    "B": "Country",
    "C": "CountryCode"
},
{
    "A": "C101",
    "B": "AUS",
    "C": "AUS01",
},
{
    "A": "C102",
    "B": "AUS",
    "C": "AUS02",
}]

如何删除数组的第一个元素并像这样更改数组对象的键名

[{
    "CustomerCode": "C101",
    "Country": "AUS",
    "CountryCode": "AUS01",
},
{
    "CustomerCode": "C102",
    "Country": "AUS",
    "CountryCode": "AUS02",
}]

2 个答案:

答案 0 :(得分:2)

您可以将.map()Object.entries()Object.fromEntries()结合使用,使用数组中第一个对象的键创建新对象,如下所示:

const arr = [{A:"CustomerCode",B:"Country",C:"CountryCode"},{A:"C101",B:"AUS",C:"AUS01"},{A:"C102",B:"AUS",C:"AUS02"}];

const prop_map = arr.shift();
const res = arr.map(o => 
  Object.fromEntries(
    Object.entries(o).map(([k, v]) => [prop_map[k], v]))
);

console.log(res);

上面,.shift()从数组中获取第一个对象作为映射对象,以供以后引用。然后.map()负责将每个对象映射(即转换)为 new 修改后的对象。新修改的对象由.map()的内部函数返回的值定义。在此方法中,它可以接收对象的条目(键值对数组[[key, value]]),并使用另一个.map()方法。该.map()将每个键值对数组映射到一个新的键值对数组。但是,密钥现在由prop_map(我们在开始时使用.shift()提取的对象)中的关联值定义。现在我们有了一个键值对数组的数组,其中每个键都是prop_map中的值,我们可以使用Object.fromEntries(),它将这个键值对数组转换为一个对象。通过将.map()应用于arr返回此新对象,该对象将产生最终结果。

请注意,Object.fromEntries()确实具有limited browser compatibility,但是,如果需要,可以使用polyfill。

答案 1 :(得分:0)

您可以从数组中删除第一项,然后映射到数组上。

let data = [{
    "A": "CustomerCode",
    "B": "Country",
    "C": "CountryCode"
},
{
    "A": "C101",
    "B": "AUS",
    "C": "AUS01",
},
{
    "A": "C102",
    "B": "AUS",
    "C": "AUS02",
}];

// Remove first item in array
data.shift();

let newData = data.map(({A, B, C}) => ({
    CustomerCode: A,
    Country: B,
    CountryCode: C
}));

console.log(newData);