【问题标题】:How to make an array of objects from an array of elements如何从元素数组中创建对象数组
【发布时间】:2022-01-01 16:52:05
【问题描述】:

这快把我逼疯了。

我有一个这样的数组:

myArray = ['A', 'B', 'C', 'D', 'E', 'F', ];

我的代码正在创建一个新对象,如下所示:

myNewObj = [
 {
   name: "A",
   displayName: "A"
 },
 {
   name: "B",
   displayName: "B"
 },
 {
   name: "C",
   displayName: "C"
 },
 {
   name: "C",
   displayName: "C"
 },
 {
   name: "D",
   displayName: "D"
 },
 {
   name: "E",
   displayName: "E"
 },
 {
   name: "F",
   displayName: "F"
 }
]

我的代码在 myArray 中获取值,我想创建 myNewObj

这就是我目前的做法

我创建了新对象

let newObj = [{
    "name": "",
    "displayName": ""
}];

然后我使用一个简单的 FOR NEXT 循环,它一直工作到一个点并声称 newObj[i].name IS UNDEFINED...当我定义它并在 Google 开发控制台中查看它时,这怎么可能?

            for (let i = 0; i < myArray.length; i++) {
                newObj[i].name = myArray[i];
                newObj[i].displayName = myArray[i];

                myNewObj.push(newObj);
            }

但是,我一直收到此错误:

newObj[i].name 未定义,它会死掉。

更新:一切正常,这是实际的真实数据

但正如你所见,原型在那里,当我保存到 sessionStorage 时,我得到 [Object,Object], x 12....

我需要去掉 name: 和 displayName: 并放入另一个对象吗?

【问题讨论】:

    标签: javascript arrays javascript-objects


    【解决方案1】:

    使用Array#map:

    const myArray = ['A', 'B', 'C', 'D', 'E', 'F'];
    
    const myNewArray = myArray.map(e => ({ name: e, displayName: e }));
    
    console.log(myNewArray);

    您的解决方案(您需要将数组初始化为[],并在每次迭代中创建一个新对象以推送它):

    const myArray = ['A', 'B', 'C', 'D', 'E', 'F'];
    
    const myNewArray = [];
    
    for (let i = 0; i < myArray.length; i++) {
      const obj = {};
      obj.name = myArray[i];
      obj.displayName = myArray[i];
      myNewArray.push(obj);
    }
    
    console.log(myNewArray);

    【讨论】:

    【解决方案2】:

    代码问题

    您的Array.Push 操作不正确。你的 let newObj 应该是一个对象,而不是一个数组。它应该在循环内初始化。这样每次执行都会占用不同的内存位置。您应该将myNewObj 定义为一个空数组,并且应该将您的newObj 推入循环内的myNewObj 数组中。

    工作小提琴

    const myArray = ['A', 'B', 'C', 'D', 'E', 'F'];
    const myNewObj = [];
    for (let i = 0; i < myArray.length; i++) {
      let newObj = {
        "name": "",
        "displayName": ""
      };
      newObj.name = myArray[i];
      newObj.displayName = myArray[i];
      myNewObj.push(newObj);
    };
    console.log(myNewObj);

    更好的方法

    解决此问题的更好方法是使用Array.map。 Array.map 从现有数组中返回一个新数组。您可以在myArray 上运行Array.map 并构造myNewObj 数组,如下所示。

    工作小提琴

    const myArray = ['A', 'B', 'C', 'D', 'E', 'F'];
    const myNewObj = myArray.map((item) => ({ name: item, dispayName: item}));
    console.log(myNewObj)

    【讨论】:

      【解决方案3】:

      var myArray = ['A', 'B', 'C', 'D', 'E', 'F', ];
      var myNewObj = [];
      for (let i = 0; i < myArray.length; i++) {
                  var newObj = {
                  name:'',
                  displayName:''
                  };
                      newObj['name'] = myArray[i];
                      newObj['displayName'] = myArray[i];
      
                      myNewObj.push(newObj);
      }
      console.log(myNewObj);

      【讨论】:

        【解决方案4】:
        1. 出于某种原因,您试图将newObj 定义为一个包含一个对象的数组。只需创建一个新对象。

        2. 在每次迭代的循环范围内创建一个新对象。然后,您可以将该对象推送到空输出数组中。

        const letters = ['A', 'B', 'C', 'D', 'E', 'F'];
        const arr = [];
        
        for (let i = 0; i < letters.length; i++) {
          const obj = {};
          obj.name = letters[i];
          obj.displayName = letters[i];
          arr.push(obj);
        }
        
        console.log(arr);

        【讨论】:

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