Javascript 是否有任何方法可以基于键将对象附加到现有的对象数组中

Javascript 是否有任何方法可以基于键将对象附加到现有的对象数组中,javascript,json,Javascript,Json,我有一个json对象,如下所示 let existing_data = [ { "client":[ { "name":"aaaa", "filter":{ "name":"123456" } } ] }, {

我有一个json对象,如下所示

let existing_data = [
       {
          "client":[
             {
                "name":"aaaa",
                "filter":{
                   "name":"123456"
                }
             }
          ]
       },
       {
          "server":[
             {
                "name":"qqqqq",
                "filter":{
                   "name":"984567"
                }
             }
          ]
       },
       {
          "server_2":[
             {
                "name":"Testing_2",
                "filter":{
                   "name":"567845"
                }
             }
          ]
       }
    ]
let input_data =  {
      "client":[
         {
            "name":"aaaa",
            "filter":{
               "name":"123456"
            }
         }
      ]
    }
这将是动态的,因为现在刚刚给出了示例对象。如果我填写表单输入,将得到如下对象

let existing_data = [
       {
          "client":[
             {
                "name":"aaaa",
                "filter":{
                   "name":"123456"
                }
             }
          ]
       },
       {
          "server":[
             {
                "name":"qqqqq",
                "filter":{
                   "name":"984567"
                }
             }
          ]
       },
       {
          "server_2":[
             {
                "name":"Testing_2",
                "filter":{
                   "name":"567845"
                }
             }
          ]
       }
    ]
let input_data =  {
      "client":[
         {
            "name":"aaaa",
            "filter":{
               "name":"123456"
            }
         }
      ]
    }
我需要将这个对象附加到现有的“客户机”json对象中。预期产出将是

[
   {
      "client":[
         {
            "name":"aaaa",
            "filter":{
               "name":"123456"
            }
         },
         {
            "name":"bbbb",
            "filter":{
               "name":"456789"
            }
         }
      ]
   },
   {
      "server":[
         {
            "name":"qqqqq",
            "filter":{
               "name":"984567"
            }
         }
      ]
   },
   {
      "server_2":[
         {
            "name":"Testing_2",
            "filter":{
               "name":"567845"
            }
         }
      ]
   }
]
我尝试了下面的方法,但效果不理想。我们将非常感谢您的帮助

像下面这样尝试,但没有按预期工作

existing_data.forEach(function (obj) {
  if(Object.keys(obj) == 'client') {
    let old_values = Object.values(obj['client']);
    let new_values = {old_values,input_data['client']};
   }
});
    console.log(JSON.stringify(new_values));

我不知道我是否理解。但是,正如您所说,您希望输入一个对象,它已经在原始数组中的对象中。
客户端名称
“aaaa”
已在
现有的\u数据中。是这样吗?

您可以使用reduceObject.entriesconcat将新数据与键的相应值合并

let existing_data=[{“client”:[{“name”:“aaaa”,“filter”:{“name”:“123456”}}},{“server”:[{“name”:“qqqqq”,“filter”:{“name”:“984567”}}}}},{“server_2”:[{“name”:“Testing_2”,“filter”:{“name”:“567845”}}}]
让输入数据={“客户机”:[{“名称”:“bbb”,“过滤器”:{“名称”:“2345”}]}
让输入_data2={“client2”:[{“name”:“bbb”,“filter”:{“name”:“2345”}]}
函数addData(旧数据、新数据){
let[key,value]=Object.entries(newData)[0]
设为假
让modifiedData=oldData.reduce((op,inp)=>{
if(输入hasOwnProperty(键)){
找到=真
op[key]=inp[key].concat(newData[key])
}否则{
op=对象分配(op,inp)
}
返回操作
}, {})
//返回值基于是否在数据中找到键
找到返回?modifiedData:Object.assign(modifiedData,newData)
}
日志(添加数据(现有数据、输入数据))
log(添加数据(现有数据,输入数据2))
这就是您需要的吗

let existing_data = [{
    "client": [{
      "name": "aaaa",
      "filter": {
        "name": "123456"
      }
    }]
  },
  {
    "server": [{
      "name": "qqqqq",
      "filter": {
        "name": "984567"
      }
    }]
  },
  {
    "server_2": [{
      "name": "Testing_2",
      "filter": {
        "name": "567845"
      }
    }]
  }
];

existing_data.find(function(obj) {
    return "client" in obj;
}).client.push(new_values);

console.log(existing_data);

是否可以将现有数据设置为具有以下属性的对象:客户端、服务器、服务器2等?还是必须让它成为一个对象数组,每个对象只有一个属性?换句话说,它可以是这样的:让现有的_数据={“client”:[{“name”:“aaaa”,“filter”:{“name”:“123456”}],“server”:[…],“server_2”:[…],}为什么不直接使用
现有的_数据[0]['client'])。push(input_数据['client'])
@GauravSingh这是一个输入,所以输入可以有不同的键。是的,请更正@code Maniacnot name“aaa”,需要检查“client”数组是否存在。如果存在,那么我需要使用现有的“客户机”数组追加该对象。否则需要添加新数组。我明白了吗?它正在向对象{“client”:[{“name”:“aaaa”,“filter”:{“name”:“123456”}},{“client”:[{“name”:“aaaa”,“filter”:{“name”:“123456”}}]}添加一个键。我需要一个“client”键,在里面附加新的数据这是有效的,但是,如果“input_data”不存在于“existing_data”中,那么我们应该添加该对象。请为该场景提供一些解决方案。再次抱歉,创建了JSFIDLE,请检查。它没有附加新值。我不知道我在哪里失踪。请参考,提供fiddle@Deepak,你在fiddle中有一个不同的结构,然后你发布了问题,这里你有一个键,所以我相应地合并了,在单个对象下有两个键,所以它只是合并了输入数据中的键,留下了其他键数据,是的,正确,实际上,fiddle的格式是正确的。真的很抱歉丢失了格式。你能给出一些解决办法吗?尝试了2天多。实际上,为什么格式不匹配意味着,这是动态对象,无论我从“addData”得到什么响应,函数我都会用另一个“新输入数据”将相同的内容再次传递到函数中。因此,请提供一些好的解决方案来克服这个问题