有一个数组
let arr = [
['one','apple','acid','Lorem1'],
['one','strawberry','sugar','Lorem2'],
['two','melon','water','Lorem3'],
['two','melon','sugar','Lorem4'],
['three','cow','meat','Lorem5'],
['three','peeg','meat','Lorem6']
];
有必要将其变成以下对象:
let obj = {
one:{
apple:{
acid:{
title:'Lorem1'
}
},
strawberry:{
sugar:{
title:'Lorem2'
}
}
},
two:{
melon:{
water:{
title:'Lorem3'
},
sugar:{
title:'Lorem4'
}
}
},
three:{
cow:{
meat:{
title:'Lorem5'
}
},
peeg:{
meat:{
title:'Lorem6'
}
}
}
}
我尝试过,但是此退出键是未定义的:
for( row = 1; row<arr.length; row++ ) {
obj[arr[0]][arr[1]][arr[2]]={
title:arr[3]
};
}
但是由于事先未定义索引,因此会产生未定义的错误。
帮助找到正确的决定,只有在“如果”出现时才会出现拐杖。
答案 0 :(得分:1)
您的代码不起作用,因为使用obj[attr]
syntex时javascript不会自动创建空对象,您应该自己创建它。
let arr = [
['one','apple','acid','Lorem1'],
['one','strawberry','sugar','Lorem2'],
['two','melon','water','Lorem3'],
['two','melon','sugar','Lorem4'],
['three','cow','meat','Lorem5'],
];
let obj = {}
for(let attrs of arr){
let current = obj;
for(let i=0;i<attrs.length-1;++i){
if(!current[attrs[i]])
current[attrs[i]]={}
current=current[attrs[i]]
}
current['title']=attrs[attrs.length-1]
}
console.log(obj)