我有一个如下的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"
}
}
]
}
我需要将此对象附加到现有的“客户端” 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));
答案 0 :(得分:0)
我不知道我是否理解。但是,正如您所说,您想输入一个对象,该对象已经在原始数组的对象之中。
客户端名称"aaaa"
已在existing_data
json中。是这样吗?
答案 1 :(得分:0)
您可以使用 reduce 和 Object.entries 和 concat 合并具有键值的新数据
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": "bbb","filter": {"name": "2345"}}]}
let input_data2 = {"client2": [{"name": "bbb","filter": {"name": "2345"}}]}
function addData(oldData, newData) {
let [key, value] = Object.entries(newData)[0]
let found = false
let modifiedData = oldData.reduce((op, inp) => {
if (inp.hasOwnProperty(key)) {
found = true
op[key] = inp[key].concat(newData[key])
} else {
op = Object.assign(op, inp)
}
return op
}, {})
// return value based on key found in data or not
return found ? modifiedData : Object.assign(modifiedData, newData)
}
console.log(addData(existing_data, input_data))
console.log(addData(existing_data, input_data2))
答案 2 :(得分:0)
这是您需要的吗?
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);