Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何基于对象数组更新复杂的json对象_Arrays_Json_Angular_Typescript - Fatal编程技术网

Arrays 如何基于对象数组更新复杂的json对象

Arrays 如何基于对象数组更新复杂的json对象,arrays,json,angular,typescript,Arrays,Json,Angular,Typescript,我有两个数据结构,如下所示 数据1: { purchaceOrder: [{ name: "Purchase Order", version: 1, description: "purchase order process", saved: true, visibility: true }, { name: "Purchase Order",

我有两个数据结构,如下所示

数据1:

{
  purchaceOrder: [{
      name: "Purchase Order",
      version: 1,
      description: "purchase order process",
      saved: true,
      visibility: true
    },
    {
      name: "Purchase Order",
      version: 2,
      description: "purchase order process",
      saved: false,
      visibility: true
    }
  ],
  requestOrder: [{
      name: "Request Order",
      version: 1,
      description: "request order process",
      saved: true,
      visibility: true
    },
    {
      name: "Request Order",
      version: 2,
      description: "request order process",
      saved: false,
      visibility: true
    }
  ],
  cancelOrder: [{
    name: "Cancel Order",
    version: 1,
    description: "cancel order process",
    saved: false,
    visibility: false
  }]
}
数据2:

[
  {
    id: "dwffrgefg68964",
    name: "Purchase Order",
    version: 1
  },
  {
    id: "emffrgefg68964",
    name: "Purchase Order",
    version: 2
  },
  {
    id: "iuffrgefg68964",
    name: "request Order",
    version: 1
  }
]
  
我希望根据名称筛选data1,将data2中的id添加到data1中的每个对象,如果在data2中找不到进程名称,则删除data1中的整个对象/空数组,如下所示

最终结果:

{
  purchaceOrder: [{
      id: "dwffrgefg68964"
      name: "Purchase Order",
      version: 1,
      description: "purchase order process",
      saved: true,
      visibility: true
    },
    {
      id: "emffrgefg68964"
      name: "Purchase Order",
      version: 2,
      description: "purchase order process",
      saved: false,
      visibility: true
    }
  ],
  requestOrder: [{
    id: "iuffrgefg68964"
    name: "Request Order",
    version: 1,
    description: "request order process",
    saved: true,
    visibility: true
  }]
}
我尝试了各种解决方案,但没有得到预期的结果。这就是我所拥有的:

getAllProcess(){
for (let key in data1) {
  var temp1 = data1[key];
  for (let i = 0; i < temp1.length; i++) {
      const reqModel = data2.find(process=> process.name === temp1[i].name&& process.version === temp1[i].version);
    if(reqModel){
      temp1[i].id=reqModel.id;
        data1[key][i]=temp1[i];
    }
    }}
    return data1;
}

我给你做了一些算法。它使用空数组创建data1,然后按名称属性推送data2项

const data1 = {
  requestOrder: [],
  purchaseOrder: [],
  cancelOrder: []
};
const data2 = ...;
data2.forEach((d) => {
  if (d.name == 'Request Order') {
    data1.requestOrder.push(d);
  } else if (d.name == 'Purcase Order') {
    data1.purchaseOrder.push(d);
  } else {
    data1.cancelOrder.push(d);
  }
});

我给你做了一些算法。它使用空数组创建data1,然后按名称属性推送data2项

const data1 = {
  requestOrder: [],
  purchaseOrder: [],
  cancelOrder: []
};
const data2 = ...;
data2.forEach((d) => {
  if (d.name == 'Request Order') {
    data1.requestOrder.push(d);
  } else if (d.name == 'Purcase Order') {
    data1.purchaseOrder.push(d);
  } else {
    data1.cancelOrder.push(d);
  }
});

你的代码很接近;您只需要删除data1中的条目,这些条目在data2中没有相应的值:

设data1={ 采购订单:[{ 名称:采购订单, 版本:1,, 说明:采购订单流程, 是的, 可见性:正确 }, { 名称:采购订单, 版本:2, 说明:采购订单流程, 保存:错误, 可见性:正确 } ], 请求订单:[{ 名称:请求订单, 版本:1,, 描述:请求订单流程, 是的, 可见性:正确 }, { 名称:请求订单, 版本:2, 描述:请求订单流程, 保存:错误, 可见性:正确 } ], 取消订单:[{ 名称:取消订单, 版本:1,, 说明:取消订单处理, 保存:错误, 可见性:错误 }] }; 让数据2=[{ id:dwffrgefg68964, 名称:采购订单, 版本:1 }, { id:emffrgefg68964, 名称:采购订单, 版本:2 }, { id:iuffrgefg68964, 名称:请求订单, 版本:1 } ]; 函数getAllProcess{ 对于let,输入数据1{ var temp1=data1[key]; 对于let i=temp1.length-1;i>=0;i-{ const reqModel=data2.findprocess=>process.name==temp1[i]。name&&process.version==temp1[i]。version; if-reqModel{ temp1[i].id=reqModel.id; data1[key][i]=temp1[i]; }否则{ data1[key].i,1; } } if!data1[key].length{ 删除数据1[键]; } } 返回数据1; }
console.loggetAllProcess 你的代码很接近;您只需要删除data1中的条目,这些条目在data2中没有相应的值:

设data1={ 采购订单:[{ 名称:采购订单, 版本:1,, 说明:采购订单流程, 是的, 可见性:正确 }, { 名称:采购订单, 版本:2, 说明:采购订单流程, 保存:错误, 可见性:正确 } ], 请求订单:[{ 名称:请求订单, 版本:1,, 描述:请求订单流程, 是的, 可见性:正确 }, { 名称:请求订单, 版本:2, 描述:请求订单流程, 保存:错误, 可见性:正确 } ], 取消订单:[{ 名称:取消订单, 版本:1,, 说明:取消订单处理, 保存:错误, 可见性:错误 }] }; 让数据2=[{ id:dwffrgefg68964, 名称:采购订单, 版本:1 }, { id:emffrgefg68964, 名称:采购订单, 版本:2 }, { id:iuffrgefg68964, 名称:请求订单, 版本:1 } ]; 函数getAllProcess{ 对于let,输入数据1{ var temp1=data1[key]; 对于let i=temp1.length-1;i>=0;i-{ const reqModel=data2.findprocess=>process.name==temp1[i]。name&&process.version==temp1[i]。version; if-reqModel{ temp1[i].id=reqModel.id; data1[key][i]=temp1[i]; }否则{ data1[key].i,1; } } if!data1[key].length{ 删除数据1[键]; } } 返回数据1; }
console.loggetAllProcess;如果数据2中不存在保存的属性和可见性属性,如何定义它们?@OsmanOmar这两个数据都来自不同的表。我只想修改只有id的进程的data1。如果data2中不存在保存的属性和可见性属性,如何定义这些属性?@OsmanOmar这两个数据都来自后端不同的表。我只想用id为的进程修改data1。