簡體   English   中英

動態創建 object 密鑰

[英]Dynamically Creating object keys

我一直在嘗試理解和掌握使用 javascript 創建 json 對象,但是我似乎無法弄清楚如何(首先迭代一些東西,並將該值用作我的鍵)。 我的第二個問題是當我看到我的 json 結果時,它似乎總是與前面的空白項嵌套在一起。 這就是我的意思:

我當前的代碼部分是:

.then((data)=>{
    connection.query("SELECT * FROM amion_onCall", function (err, result, fields){
        const fixed = [];
            let i;
            for (i in result){
                aName = result[i].name;
                aServ = result[i].specialty;
                aShift = result[i].shift;
                aOff = result[i].office;
                aCell = result[i].cell;
                aTag  = result[i].tag;
                var data = {aServ: {name:aName, service: aServ, shift: aShift, office: aOff, cell: aCell, tag: aTag}};
                // console.log(data);
                fixed.push(data);
            }
        fs.writeFile('./data/json/newAmion.json', JSON.stringify(fixed), function(err){
            if (err) throw err;
            console.log("Wrote New Amion");
        });
    });
})

我的 json 查看器中的 output 是:

[
 {
   "aServ": {
      "name": "Dr.John",
      "service": "Cardiology",
      "shift": "7a-7p",
      "office": "123",
      "cell": "123-456-789",
      "tag": "no tags"
  }
}, 

...等等我的〜150個條目。

問題#1:我想將它提升一個完整的級別。 我不確定如何做到這一點,或者為什么它開始如此深入地嵌套。

問題 #2:當我迭代 aServ 時,我希望實際值是 json 開頭的 output。 我當前的代碼為每個人靜態打印“aServ”……我不想那樣做。 例如,這就是我試圖讓我的 json 到 output 的方式:

{
  "Cardiology": {
     "name": "Dr.John",
      "service": "Cardiology",
      "shift": "7a-7p",
      "office": "123",
      "cell": "123-456-789",
      "tag": "no tags"
    }, 
  "Pulmonology": { ...and so on
}

答案1:

“前面的空白項”是什么意思? 你的意思是“服務”嗎? 如果是,因為你在這里做了var data = {aServ: {... } }

另外,你有很多東西。 所以那些在數組[]里面。

答案 2:

// Change it to object instead of array
const fixed = {};

// Inside array
if (!Array.isArray(fixed[aServ])) {
  fixed[aServ] = []  
}

fixed[aServ].push({
  name: aName,
  service: aServ,
  shift: aShift,
  office: aOff,
  cell: aCell,
  tag: aTag,
})

無需將項目推送到數組。

請記住,如果有多個aServ具有相同的值,那么它將替換現有項目。 這就是為什么你應該使用數組。

問題#1:我想將它提升一個完整的級別。 我不確定如何做到這一點,或者為什么它開始如此深入地嵌套。

它是嵌套的,因為您位於對象數組中。 JavaScript 中的 Arrays 用括號 [] 表示。 在這種情況下,我認為這就是您想要的:您正在創建一個對象數組。

問題 #2:當我迭代 aServ 時,我希望實際值是 json 開頭的 output。

這一行:

 var data = {aServ: {name:aName, service: aServ, shift: aShift, office: aOff, cell: aCell, tag: aTag}}

需要改成這樣:

 var data = {[aServ]: {name:aName, service: aServ, shift: aShift, office: aOff, cell: aCell, tag: aTag}}

注意括號。 這會將您的變量值插入為數組鍵。

暫無
暫無

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

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