javascript - 如何将对象附加到现有的 json 对象数组中
问题描述
我有像下面这样的 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
(例如:“客户端”)时,您的功能似乎可以工作。
但是你必须处理第二个用例:当key
在对象中找不到时data_existing
(例如:“server2”)。
这应在循环之后执行,如果未找到密钥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;
}
希望能帮助到你。
推荐阅读
- python - 检查是否调用了视图函数
- css - 如何从嵌入的组件中设置宿主组件的样式
- javascript - JavaScript 在不改变位置的情况下确定移动设备上的 touchmove 方向
- python - 使用python将多行导入具有唯一约束的SQL表
- keras - LSTM 模型中 epoch 图中的损失跳跃 - keras
- c# - 如何在新行中显示列表中的每组数据?
- sql - 枢轴和交叉应用
- ios - 无法检测全屏 AVPlayerViewController 转换
- javascript - 比较数组javascript时找到最接近的匹配项
- python - Tensorflow DNNClassifier 错误:[Labels must <= n_classes - 1] [Condition x <= y did not hold element-wise:x