簡體   English   中英

如何將對象附加到現有的 json 對象數組中

[英]How to append the object into existing json array of objects

我有像下面這樣的 json 對象,它將是動態的,

let data_existing= [
       {
          "client":[
             {
                "name":"aaaa",
                "filter":{
                   "name":"123456"
                }
             }
          ]
       },
       {
          "server":[
             {
                "name":"qqqqq",
                "filter":{
                   "name":"984567"
                }
             }
          ]
       },
               ]

從輸入中,我將得到一個如下所示的對象,

let data_new =  {
      "client":[
         {
            "name":"bbbbb",
            "filter":{
               "name":"456789"
            }
         }
      ]
    }

我需要將此對象附加到現有的“客戶端”json 對象中。 預期的輸出將是這樣的,

[
   {
      "client":[
         {
            "name":"aaaa",
            "filter":{
               "name":"123456"
            }
         },
         {
            "name":"bbbb",
            "filter":{
               "name":"456789"
            }
         }
      ]
   },
   {
      "server":[
         {
            "name":"qqqqq",
            "filter":{
               "name":"984567"
            }
         }
      ]
   }
]

並且,如果主對象中不存在“data_new”,則應將其作為如下新對象,例如,

 let data_new =  {
          "server2":[
             {
                "name":"kkkkk",
                "filter":{
                   "name":"111111"
                }
             }
          ]
        }

output will be like,
[
   {
      "client":[
         {
            "name":"aaaa",
            "filter":{
               "name":"123456"
            }
         },
      ]
   },
   {
      "server":[
         {
            "name":"qqqqq",
            "filter":{
               "name":"984567"
            }
         }
      ]
   },
{
      "server2":[
         {
            "name":"kkkkk",
            "filter":{
               "name":"11111"
            }
         }
      ]
   }
]

我嘗試了以下方法,但沒有按預期工作。 一些幫助將不勝感激。

像下面一樣嘗試但沒有按預期工作,

function addData(oldData, newData) {
  let [key, value] = Object.entries(newData)[0]
  return oldData.reduce((op, inp) => {
    if (inp.hasOwnProperty(key)) {
    console.log("111");
      op[key] = inp[key].concat(newData[key]);
    } else {
    console.log(JSON.stringify(inp));
      op = Object.assign(op, inp);
    }
    return op
  }, {})
}

key已經屬於data_existing (例如:“client”)時,您的功能似乎可以工作。

但是你必須處理第二個用例:當key中的對象沒有被發現data_existing (如:“服務器2”)。
這將在reduce循環之后執行,如果未找到鍵,則將新項目添加到data_existing

以下是您如何實現這一目標的示例:

function addData(inputData, inputItem) {
  const [newKey, newValue] = Object.entries(inputItem)[0];

  let wasFound = false; // true iif the key was found in list
  const res = inputData.reduce((accumulator, item) => {
    const [key, value] = Object.entries(item)[0];
    const keyMatch = key === newKey;
    if (keyMatch) {
      wasFound = true;
    }
    // concatenate the lists in case of key matching
    const newItem = { [key]: keyMatch ? [...value, ...newValue] : value };
    return [...accumulator, newItem];
  }, []);

  if (!wasFound) {
    res.push(inputItem); // if key was not found, add item to the list
  }
  return res;
}

希望能幫助到你。

暫無
暫無

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

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