Javascript 在嵌套数组中循环并转换为对象
我想将一组嵌套数组转换为一组对象,其中包含从嵌套数组中收集的信息: 之前:Javascript 在嵌套数组中循环并转换为对象,javascript,arrays,loops,multidimensional-array,nested-loops,Javascript,Arrays,Loops,Multidimensional Array,Nested Loops,我想将一组嵌套数组转换为一组对象,其中包含从嵌套数组中收集的信息: 之前: var employeeData = [ [ ['firstName', 'Bob'], ['lastName', 'Lob'], ['age', 22], ['role', 'salesperson'] ], [ ['firstName', 'Mary'], ['lastName', 'Joe'], ['age', 32], ['role', 'director'] ] ] 之后: [
var employeeData = [
[
['firstName', 'Bob'], ['lastName', 'Lob'], ['age', 22], ['role', 'salesperson']
],
[
['firstName', 'Mary'], ['lastName', 'Joe'], ['age', 32], ['role', 'director']
]
]
之后:
[
{firstName: 'Bob', lastName: 'Lob', age: 22, role: 'salesperson'},
{firstName: 'Mary', lastName: 'Joe', age: 32, role: 'director'}
]
下面是我为解决这个问题而编写的函数,但我不太清楚循环出了什么问题:
var employeeData=[
[
['firstName','Bob'],['lastName','Lob'],['age',22],'role','sallerson']
],
[
['firstName','Mary',['lastName','Joe'],['age',32],'role','director']
]
]
函数转换数据(employeeData){
让newObject={};
设newArr=[];
对于(var i=0;i console.log(transformData(employeeData))代码>如何修复代码
循环只需2个:
1.迭代数组
2.迭代子数组并构造对象
var employeeData=[[“姓氏”、“鲍勃”]、[“姓氏”、“Lob”]、[“年龄”、“22岁”、“角色”、“销售员”]、[[“姓氏”、“玛丽”]、[“姓氏”、“乔”]、[“年龄”、“32岁”、“角色”、“主管”]]
函数转换数据(employeeData){
让新对象;
常数newArr=[];
对于(变量i=0;i console.log(transformData(employeeData))代码>您的代码有什么问题:
for (var i = 0; i < employeeData.length; i++) {
for (var x = 0; x < employeeData[i].length; x++) {
newObject[employeeData[i][x][0]] = employeeData[i][x][1];
}
newArr.push(newObject);
newObject = {};
}
循环的第三级出错。应将其删除:
for (var y = 0; y < employeeData[i][x].length; y++) {
// ^ by the way this should be x not y (not fixing the problem though)
固定代码示例:
for (var i = 0; i < employeeData.length; i++) {
for (var x = 0; x < employeeData[i].length; x++) {
newObject[employeeData[i][x][0]] = employeeData[i][x][1];
}
newArr.push(newObject);
newObject = {};
}
var employeeData=[
[
['firstName','Bob'],['lastName','Lob'],['age',22],'role','sallerson']
],
[
['firstName','Mary',['lastName','Joe'],['age',32],'role','director']
]
]
函数转换数据(employeeData){
让newObject={};
设newArr=[];
对于(var i=0;i console.log(transformData(employeeData))
对于外部数组中的每一组值,您可能只想使用映射
而不是对象
然后是一个非常简单的新地图(数据)转换代码>。这些类型的数据集的规范中添加了地图
var employeeData=[
[['firstName','Bob'],['lastName','Lob'],['age',22],'role','salesperson'],
[['firstName','Mary'],['lastName','Joe'],['age',32],'role','director']]
];
const res=employeeData.map(a=>newmap(a));
用于(常数m/res){
log(m.get(“firstName”);
}
问题在于变量x和y的使用
首先,这是一条线
for (var y = 0; y < employeeData[i][y].length; y++)
通过这些更改运行您的示例,我得到了正确的输出:
[
{
firstName: 'Bob',
lastName: 'Lob',
age: 22,
role: 'salesperson'
},
{
firstName: 'Mary',
lastName: 'Joe',
age: 32,
role: 'director'
}
]
其他人指出,使用map
array函数可以简化任务,这些都是很好的解决方案(比计算循环要好得多),但它们并没有解决您实际提出的问题
您的代码实际上运行得很好,只是没有提取所有可用的数据。你只知道名字和姓氏。通过再添加两行,您可以获得其余的数据。此外,第二个循环甚至不是必需的(它不会伤害您,但实际上没有帮助,因为您从未在任何地方使用x
计数器)
var employeeData=[
[
['firstName','Bob'],['lastName','Lob'],['age',22],'role','sallerson']
],
[
['firstName','Mary',['lastName','Joe'],['age',32],'role','director']
]
]
函数转换数据(employeeData){
让newObject={};
设newArr=[];
对于(var i=0;i console.log(transformData(employeeData))代码>如果正确使用索引,您所面临的问题可以在尝试时使用for循环来解决。
如果你像我一样格式化你的数据,你会看到你的索引有三个级别你的[I,x,y]
例如,对于employeeData[0],您应该获得:
[
['firstName', 'Bob'],
['lastName', 'Lob'],
['age', 22],
['role', 'salesperson']
]
那么对于employeeData[0][0],您应该获得:
['firstName', 'Bob']
对于employeeData[0][0][0],您应该获得:'firstName'
要访问“Bob”,您需要使用数据[0][0][1],并且由于您知道此内部数组中只有两个元素,因此不需要在其中循环。
正如@TallChuck所说,你的问题很大一部分源于忘记使用你的x索引
var employeeData=[
[
['firstName','Bob'],
['lastName','Lob'],
[‘年龄’,22],
[“角色”、“销售人员”]
],
[
['firstName','Mary'],
['lastName','Joe'],
[age',32],
[‘角色’、‘导演’]
]
]
函数转换数据(employeeData){
让newObject={};
设newArr=[];
对于(变量i=0;ivar employeeData = [
[
['firstName', 'Bob'], ['lastName', 'Lob'], ['age', 22], ['role', 'salesperson']
],
[
['firstName', 'Mary'], ['lastName', 'Joe'], ['age', 32], ['role', 'director']
]
]
var d = employeeData.map(
x=>x.reduce((a,b)=>{a[b[0]]=b[1];return a;},{})
)
console.log(d)