如何从元素数组创建对象数组

How to make an array of objects from an array of elements

这让我发疯。

我有一个这样的数组:

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 是未定义的...当我定义它并在 [= 中看到它时,这怎么可能44=]开发控制台?

            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: 并放入另一个对象中?

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

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

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

代码有问题

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

工作Fiddle

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.mapArray.map returns 来自现有数组的新数组。您可以 运行 Array.mapmyArray 上构建 myNewObj 数组,如下所示。

工作Fiddle

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