【问题标题】:Change key name in an array of objects based on value from first element array [closed]根据第一个元素数组中的值更改对象数组中的键名[关闭]
【发布时间】:2019-12-12 03:50:57
【问题描述】:

我有来自文件 .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",
}]

【问题讨论】:

  • 除了您没有显示您的代码这一事实(我投票结束,因为 太宽泛),这可能是一个 XY 问题:您正在处理与 CSV 标题一样,就好像它是一个公共行一样。改变它会解决问题。
  • 所有 cmets 的 Tks。首先,我遇到了将 excel csv 转换为错误格式 json 的问题。所以当我发布这个问题时,这个问题是不必要的。

标签: javascript arrays json ecmascript-6


【解决方案1】:

您可以将.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() 负责将每个对象映射(即转换)为一个 修改的对象。新修改的对象由.map() 的内部函数返回的内容定义。在此可以获取对象的条目(键值对数组[[key, value]])并使用另一个.map() 方法。这个.map() 将每个键值对数组映射到一个新的键值对数组。但是,键现在由其在prop_map 中的关联值定义(我们在开始时使用.shift() 提取的对象)。现在我们有了一个键值对数组,其中每个键都是来自prop_map 的值,我们可以使用Object.fromEntries(),它将这个键值对数组转换为一个对象。这个新对象由.map() 返回并应用于arr,从而产生最终结果。

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

【讨论】:

    【解决方案2】:

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

    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);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      相关资源
      最近更新 更多