如何从元素数组创建对象数组
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);
您出于某种原因试图将 newObj
定义为具有一个对象的数组。只需创建一个新对象。
每次迭代在循环范围内创建一个新对象。然后您可以将该对象推入空输出数组。
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.map
。 Array.map
returns 来自现有数组的新数组。您可以 运行 Array.map
在 myArray
上构建 myNewObj
数组,如下所示。
工作Fiddle
const myArray = ['A', 'B', 'C', 'D', 'E', 'F'];
const myNewObj = myArray.map((item) => ({ name: item, dispayName: item}));
console.log(myNewObj)
这让我发疯。
我有一个这样的数组:
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);
您出于某种原因试图将
newObj
定义为具有一个对象的数组。只需创建一个新对象。每次迭代在循环范围内创建一个新对象。然后您可以将该对象推入空输出数组。
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.map
。 Array.map
returns 来自现有数组的新数组。您可以 运行 Array.map
在 myArray
上构建 myNewObj
数组,如下所示。
工作Fiddle
const myArray = ['A', 'B', 'C', 'D', 'E', 'F'];
const myNewObj = myArray.map((item) => ({ name: item, dispayName: item}));
console.log(myNewObj)