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
如何通过比较javascript中的两个对象数组来更新特定属性?_Javascript_Arrays - Fatal编程技术网

如何通过比较javascript中的两个对象数组来更新特定属性?

如何通过比较javascript中的两个对象数组来更新特定属性?,javascript,arrays,Javascript,Arrays,我有下面两个javascript中的对象数组 data1 = [ { id: 123, option: "ABC", value: "123" }, { id: 234, option: "DFG", value: "234" } ]; data2 = [ { id: 123, option: "ABC", value: "123" } ]; 当id与对象的第二个数组匹配时,我只想在对象的第一个数

我有下面两个javascript中的对象数组

data1 = [
  {
    id: 123,
    option: "ABC",
    value: "123"
  },
  {
    id: 234,
    option: "DFG",
    value: "234"
  }
];

data2 = [
  {
    id: 123,
    option: "ABC",
    value: "123"
  }
];
当id与对象的第二个数组匹配时,我只想在对象的第一个数组中将该特定id的值(属性)设置为0。如下所示一旦ID123在两个数组中都匹配,那么data1数组应该如下所示

data1 = [
  {
    id: 123,
    option: "ABC",
    value: "0"
  },
  {
    id: 234,
    option: "DFG",
    value: "234"
  }
];

如何实现上述场景?

您可以使用
foreach
,这将改变您需要的第一个数组,或者您也可以使用
map
(但它将生成新数组):

var data1=[{id:123,选项:“ABC”,值:“123”},{id:234,选项:“DFG”,值:“234”}];
var data2=[{id:123,选项:“ABC”,值:“123”}];
data1.forEach(k=>{
ispresent=data2.find(p=>p.id==k.id);
如果(ispresent)k.value='0'
});

console.log(data1)
您可以从第二个数组创建一组对象id,然后从第一个数组创建新对象,如果对象的id在该集合内,则更改
属性(使用
.has()
进行检查):

constdata1=[{id:123,选项:“ABC”,值:“123”},{id:234,选项:“DFG”,值:“234”}];
constdata2=[{id:123,选项:“ABC”,值:“123”}];
const idSet=新集合(data2.map(o=>o.id));
const res=data1.map(o=>({…o,value:idSet.has(o.id)-“0”:o.value}));

控制台日志(res)
您可以将data2的id保存在
集合中,并在data1上迭代,如果其id在集合中,则更改每个项的值:

let data1=[{id:123,选项:“ABC”,值:“123”},{id:234,选项:“DFG”,值:“234”}];
让data2=[{id:123,选项:“ABC”,值:“123”}];
设集合=新集合();
for(设i=0;i