【问题标题】:Create an array of objects from a nested object从嵌套对象创建对象数组
【发布时间】:2019-10-06 10:50:36
【问题描述】:

我有一个嵌套对象“empData”。 我需要遍历对象中的每个键并返回一个对象数组。 我的对象“empData”中的每个键又是一个对象。

现在,我需要返回一个对象数组:

预期输出:

[{
 "team": "AUS",
 "name": "John"
}, {
 "team": "CAN",
 "name": "Steve"
}, {
 "team": "IND",
 "name": "Robbie"
}, {
 "team": "IRE",
 "name": "James"
}, {
 "team": "USA",
 "name": "Austin"
}];

我的代码:

function getData() {
 const empData = {
  "AUS": {
   "isRetired": true,
   "name": "John"
  },
  "CAN": {
   "name": "Steve"
  },
  "IND": {
   "name": "Robbie"
  },
  "IRE": {
   "name": "James"
  },
  "USA": {
   "name": "Austin"
  }
 };
 Object.keys(empData).map(function(eachKey) {
  const obj = {
   team: eachKey,
   name: eachKey.name
  };
  console.log(obj);
  return obj;
 });
}
<button onclick="getData()">Get Data</button>

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: javascript arrays loops object nested


    【解决方案1】:

    您可以使用Object.entries 将对象转换为数组。使用map 循环遍历数组。

    Object.entries 第一个元素是键,第二个是值。

    const empData = {
      "AUS": {
        "isRetired": true,
        "name": "John"
      },
      "CAN": {
        "name": "Steve"
      },
      "IND": {
        "name": "Robbie"
      },
      "IRE": {
        "name": "James"
      },
      "USA": {
        "name": "Austin"
      }
    };
    
    var result = Object.entries(empData).map(([team, {name}]) => ({team,name}));
    
    console.log(result);

    【讨论】:

      【解决方案2】:

      .map 改为 Object.entries,因此您可以同时提取密钥(以获取 team 和值(以便您可以获取 name):

      const empData = {
        "AUS": {
          "isRetired": true,
          "name": "John"
        },
        "CAN": {
          "name": "Steve"
        },
        "IND": {
          "name": "Robbie"
        },
        "IRE": {
          "name": "James"
        },
        "USA": {
          "name": "Austin"
        }
      };
      const getData = () => {
        const result = Object.entries(empData).map(([team, { name }]) => ({
          team,
          name
        }));
        console.log(result);
      };
      <button onclick="getData()">Get Data</button>

      【讨论】:

        【解决方案3】:

        更改name: eachKey.name

         name: empData[eachKey].name
        
        
        
        function getData() {
         const empData = {
          "AUS": {
           "isRetired": true,
           "name": "John"
          },
          "CAN": {
           "name": "Steve"
          },
          "IND": {
           "name": "Robbie"
          },
          "IRE": {
           "name": "James"
          },
          "USA": {
           "name": "Austin"
          }
         };
         Object.keys(empData).map(function(eachKey) {
          const obj = {
           team: eachKey,
           name: empData[eachKey].name
          };
          console.log(obj);
          return obj;
         });
        }
        

        【讨论】:

          【解决方案4】:

          您可以使用for..in 遍历对象并创建具有相关键和值的新对象并推送到另一个数组

          function getData() {
            const empData = {
              "AUS": {
                "isRetired": true,
                "name": "John"
              },
              "CAN": {
                "name": "Steve"
              },
              "IND": {
                "name": "Robbie"
              },
              "IRE": {
                "name": "James"
              },
              "USA": {
                "name": "Austin"
              }
            };
          
            let newData = [];
            for (let keys in empData) {
              newData.push({
                team: keys,
                name: empData[keys].name
              })
            }
            console.log(newData)
          }
          
          getData()

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-12-21
            • 2021-11-28
            • 2021-08-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多