【问题标题】:How to rearrange array of objects to new array of Objects如何将对象数组重新排列为新的对象数组
【发布时间】:2022-01-23 21:17:02
【问题描述】:

我有一个具有相同键的对象数组,例如:

const data = [{name: "firstName", value: "John"},
{name: "lastName", value: "Smith"},
{name: "Number", value: "421-8686"}
]

然而,我希望这些值成为键和值。示例:

const data = [{"firstName": "John"},
{"lastName": "Smith"},
{"Number": "421-8686"}]

我尝试了一些方法,但由于某种原因我失败了。我最近的尝试是:

   let newData = {}
    arrayData.forEach((item, index) => {
      let key = data.name
      let value = data.value
      newData[index] = { key: value} // this results in {"key": "John"} --> but i want {"firstName": "John"}

});

【问题讨论】:

  • { [key]: value}

标签: javascript json javascript-objects


【解决方案1】:

只需对您的代码稍作调整。必须动态创建属性。

在 ES6 中,我们可以通过将键放在方括号 [] 中来动态创建属性键。

const data = [
  { name: "firstName", value: "John" },
  { name: "lastName", value: "Smith" },
  { name: "Number", value: "421-8686" }
];

let newData = [];
data.forEach((item, index) => newData[index] = {[item.name]: item.value});
console.log(newData)

【讨论】:

    【解决方案2】:

    我相信你应该得到如下结果,你想要什么。 当然,我确认了状态。

    const data = [{name: "firstName", value: "John"},
    {name: "lastName", value: "Smith"},
    {name: "Number", value: "421-8686"}
    ]
    
    let newData = [];
    data.forEach((item) => {
      let obj = {};
      obj[item.name] = item.value;
      newData.push( obj );
    });
        
    console.log(newData);
    

    谢谢。

    【讨论】:

      【解决方案3】:

          let data = [
             { name: "firstName", value: "John" },
             { name: "lastName", value: "Smith" },
             { name: "Number", value: "421-8686" },
          ];
      
          // map the data to required format.
      
          data = data.map((d) => {
             let o = {};
             o[d["name"]] = d["value"];
             return o;
          });
          
          console.log("data",data);
          
          

      【讨论】:

        【解决方案4】:

        const data = [{name: "firstName", value: "John"},
        {name: "lastName", value: "Smith"},
        {name: "Number", value: "421-8686"}
        ]
        
        
        /*const data = [{"firstName": "John"},
        {"lastName": "Smith"},
        {"Number": "421-8686"}]
        */
        for(let i = 0;i < data.length;i++){
           
            data[i][data[i].name] = data[i].value  // creates new key value pair
            delete data[i].name                    // deletes old key
            delete data[i].value
            }
            
        
        console.log(data)

        【讨论】:

          【解决方案5】:

          您可以使用Object.fromEntries

          let data = [
            {name: "firstName", value: "John"},
            {name: "lastName", value: "Smith"},
            {name: "Number", value: "421-8686"}
          ]
          
          data = data.map(info => Object.fromEntries([[info.name, info.value]]))
          
          console.log(data)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-12-08
            • 2022-06-15
            • 2020-10-19
            相关资源
            最近更新 更多