簡體   English   中英

使用 Javascript 將數組轉換為嵌套的 object 結構

[英]Convert array to nested object structure using Javascript

我正在嘗試使用Javascript將一個 object 數組轉換為一個嵌套的 object 結構,但結果沒有達到預期。 我在下面解釋我的代碼。

let data = [
        {
            "hop_no": 1,
            "jumphost_id": "jumphost1"
        },
        {
            "hop_no": 2,
            "jumphost_id": "jumphost2"
        },
        {
            "hop_no": 3,
            "jumphost_id": "another-jumphost"
        },
        {
            "hop_no": 4,
            "jumphost_id": "last-jumphost"
        }
    ]
let result ='';

for(let i = 0; i< data.length; i++) {
   const index = i+1;
   const obj = data.find(o => o.name === index);
   if(result === '' && !result['host-id']) {
      result = {
          "host-id": obj.jumphost_id,
          "next-hop":{}
      }
   }else{
     if(result['next-hop'] === '') {
        result['next-hop'] = obj.jumphost_id
     }
   }
}

這里給出了 object 的數組ie- data ,下面給出了我預期的結構。

預期結果如下。

{
                    "host-id": "jumphost1",
                    "next-hop": {
                        "host-id": "jumphost2",
                        "next-hop": {
                            "host-id": "another-jumphost",
                            "next-hop": {
                                "host-id": "last-jumphost",
                            }
                        }
                    }
                }

這里的條件是當"hop_no": 1相應的jumphost_id值將分配給host-id並且將是第一個鍵。 之后嵌套object結構將按照hop_no值的升序排列,並將各自的jumphost_id值分配給next-hop密鑰。 誰能幫我設計這個結構,只使用 Javascript。

您可以使用reduce function 來執行此操作:

 let data = [{ "hop_no": 1, "jumphost_id": "jumphost1", ip: "", port: 22, user: "", password: "", "device-type": "linux" }, { "hop_no": 2, "jumphost_id": "jumphost2", ip: "", port: 22, user: "", password: "", "device-type": "linux" }, { "hop_no": 3, "jumphost_id": "another-jumphost", ip: "", port: 22, user: "", password: "", "device-type": "linux" }, { "hop_no": 4, "jumphost_id": "last-jumphost", ip: "", port: 22, user: "", password: "", "device-type": "linux" } ] let result = data.sort((a, b) => b.hop_no - a.hop_no).reduce((prev, curr, i, array) => { let { hop_no, jumphost_id, ...rest } = curr return { 'host-id': jumphost_id, ...rest, ...(i > 0? {'next-hop': {...prev }}: {}), } }, {}) console.log(result)

您可以嘗試從內到外構建 object。

像這樣:

 let data = [ { "hop_no": 1, "jumphost_id": "jumphost1" }, { "hop_no": 2, "jumphost_id": "jumphost2" }, { "hop_no": 3, "jumphost_id": "another-jumphost" }, { "hop_no": 4, "jumphost_id": "last-jumphost" } ] let result = {}; for (var i = data.length - 1; i >= 0; i--) { let tmp = { 'host-id': data[i]['jumphost_id'], }; if (Object.keys(result).length;== 0) { tmp['next-hop'] = result; } result = tmp. } console;log(result);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM