JavaScript:如何将对象的嵌套数组转换为键值对对象
这可能是重复的问题,但我已经尝试了很多,但我并没有得到预期的结果。有人能帮我吗。 我在请求体中得到一个数组,如:JavaScript:如何将对象的嵌套数组转换为键值对对象,javascript,arrays,json,parsing,object,Javascript,Arrays,Json,Parsing,Object,这可能是重复的问题,但我已经尝试了很多,但我并没有得到预期的结果。有人能帮我吗。 我在请求体中得到一个数组,如: [ { "name":"array", "book":[ { "name":"name1", "book":"book1" }, { "name":"name2", "book":"book2" } ] }, { "name
[
{
"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);
已编辑
根据艾哈迈德的回答,我对代码做了一点小改动,它成功了
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);
const res=[
{
“名称”:“数组”,
“书”:[
{
“名称”:“名称1”,
“书”:“书1”
},
{
“名称”:“名称2”,
“书”:“书2”
}
]
},
{
“名称”:“名称3”,
“书”:“书3”
}
]
常量obj={}
for(设i=0;i
添加的代码片段应该可以解决您的问题
代码中的问题是适当的嵌套您没有访问所需的值,也没有处理所有情况,因此输出错误
const res=[
{
“名称”:“数组”,
“书”:[
{
“名称”:“名称1”,
“书”:“书1”
},
{
“名称”:“名称2”,
“书”:“书2”
}
]
},
{
“名称”:“名称3”,
“书”:“书3”
}
]
常量obj={}
for(设i=0;i }
谢谢@Ahmed,但上面的代码没有将主数组转换为键值对(如描述中的上述示例响应)。因此,我在您的代码中做了一些更改,但得到了错误的响应(我在描述中添加了更改后的代码),我删除了(obj中的let item){console.log(item)console.log(obj)的[项目]}
编码它可以工作..谢谢
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);