JavaScript:如何将对象的嵌套数组转换为键值对对象

古塔米

这可能是重复的问题,但我尝试了很多,但没有得到预期的结果。有人可以帮助我。我在请求正文中得到一个数组,如:

[
  {
    "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);
艾哈迈德·加弗

添加的代码段应该可以解决您的问题。

您的代码中的问题是适当的嵌套,您没有访问想要的值并且没有处理所有情况因此,错误的输出。

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[name] = res[i]['book']
  }

}

for(let item in obj){
  console.log(item)
  console.log(obj[item])
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章