【发布时间】:2019-12-29 04:36:09
【问题描述】:
这可能是重复的问题,但我已经尝试了很多但我没有得到预期的结果。有人可以帮助我吗? 我在请求正文中得到一个数组,例如:
[
{
"name":"array",
"book":[
{
"name":"name1",
"book":"book1"
},
{
"name":"name2",
"book":"book2"
}
]
},
{
"name":"name3",
"book":"book3"
}
]
我需要将嵌套数组的数组转换为以下格式
{
array: [
{
name1: "book1"
},
{
name2: "book2"
}
],
name3: "book3"
}
注意:在某些情况下book 可以是数组或字符串。
在我第一次尝试时,我尝试使用下面的代码将其转换为单个对象,但它不会将嵌套数组转换为键值对
const array=[
{
"name":"array",
"book":[
{
"name":"name1",
"book":"book1"
},
{
"name":"name2",
"book":"book2"
}
]
},
{
"name":"name3",
"book":"book3"
}
]
var result = {};
for (var i = 0; i < array.length; i++) {
result[array[i].name] = array[i].value;
}
console.log(result);
对上述代码的响应
{
array: [
{
name: "name1",
book: "book1"
},
{
name: "name2",
book: "book2"
}
],
name3: "book3"
}
已编辑 我对艾哈迈德的回答的代码几乎没有什么改动,而且效果很好
const res=[
{
"name":"array",
"book":[
{
"name":"name1",
"book":"book1"
},
{
"name":"name2",
"book":"book2"
}
]
},
{
"name":"name3",
"book":"book3"
}
]
const obj = {}
for(let i = 0 ; i < res.length; i++){
let name = res[i].name
if(Array.isArray(res[i]['book'])){
obj[name] = [];
for(let item in res[i]['book']){
let key = res[i]['book'][item]['name']
let value = res[i]['book'][item]['book']
let entry = {}
entry[key] = value
obj[name].push(entry)
}
}
else{
obj[res[i].name]=res[i].book;
}
}
console.log(obj);
【问题讨论】:
标签: javascript arrays json parsing object