如何将对象 属性 的名称移动到 属性 值中

How to move an object property's name into a property value

我有想要转换的对象集合:

let A = [
    {
        institution: 19.5,
        region: "EUROPE",
        code: "Bosnia and Herzegovina",
        code3: "BIH"
    },
    {
        financial: 15.5,
        region: "EUROPE",
        code: "Bulgaria",
        code3: "BGR"
    },
    {
        institution: 15.9,
        region: "EUROPE",
        code: "Croatia",
        code3: "HRV"
    },
    {
        deflation: 40.6,
        region: "EUROPE",
        code: "Cyprus",
        code3: "CYP"
    }
]

我最后想要的是:

B = [
    {
        name: "institution",
        value: 19.5,
        region: "EUROPE",
        code: "Bosnia and Herzegovina",
        code3: "BIH"
    },
    {
        name: "financial",
        value: 15.5,
        region: "EUROPE",
        code: "Bulgaria",
        code3: "BGR"
    },
    {
        name: "institution",
        value: 15.9,
        region: "EUROPE",
        code: "Croatia",
        code3: "HRV"
    },
    {
        name: "deflation",
        value: 40.6,
        region: "EUROPE",
        code: "Cyprus",
        code3: "CYP"
    }
]

我已经用下面的代码让它工作了,但我想知道是否有更优雅的方法来做到这一点?

A.forEach(e => {
    e["name"] = Object.keys(e)[0]
    e["value"] = Object.values(e)[0]
    delete e[Object.keys(e)[0]];
})

Object.keys() returns 一个数组,但你没有这样对待它。

如果您知道只有一个未知的 属性 名称需要转置,并且您知道所有其他 属性 名称,您可以 de-structure 使用已知属性的对象和 ...rest 并使用 Object.entries() 设置名称和值

let A=[{institution: 19.5, region: "EUROPE", code: "Bosnia and Herzegovina", code3: "BIH"},
{financial: 15.5, region: "EUROPE", code: "Bulgaria", code3: "BGR"},
{institution: 15.9, region: "EUROPE", code: "Croatia", code3: "HRV"},
{deflation: 40.6, region: "EUROPE", code: "Cyprus", code3: "CYP"}]


let res = A.map(({region, code, code3, ...rest})=>{
   const [name, value] = Object.entries(rest)[0]
   return { name, value, region, code, code3 }   
})

console.log(res)