Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.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_Angular - Fatal编程技术网

Javascript 角度比较数组并更新其中一个

Javascript 角度比较数组并更新其中一个,javascript,arrays,angular,Javascript,Arrays,Angular,我有这两组数组,我需要比较它们,如果第2个数组中的对象在第1个数组中找到,我需要将第1个数组中的状态更新为true。关于如何按摩数据,谢谢 下面是数组的示例 arr1 = [ {id: 1, status: false}, {id: 2, status: false}, {id: 3, status: false} ]; arr2 = [ {id: 4}, {id: 5}, {id: 2} ]; 即使您自己没有提供任何(错误的)代码,但我理解有时甚至很难从这样的事情开

我有这两组数组,我需要比较它们,如果第2个数组中的对象在第1个数组中找到,我需要将第1个数组中的状态更新为true。关于如何按摩数据,谢谢

下面是数组的示例

arr1 = [
  {id: 1, status: false},
  {id: 2, status: false},
  {id: 3, status: false}
];

arr2 = [
  {id: 4},
  {id: 5},
  {id: 2}
];

即使您自己没有提供任何(错误的)代码,但我理解有时甚至很难从这样的事情开始

在这种情况下,您应该找到一个起点。您可以使用源数组(
arr1
)作为起点,也可以使用
arr2
。如果
arr2
很小,那么使用它作为起点会更快。arr2越大,您可能越希望从
arr1
开始,因为该解决方案更具可读性(主观)

arr2
为起点,您可以将
forEach
方法与
find
结合使用:

arr2.forEach((item) => {
  const target = arr1.find(({ id }) => item.id === id);

  if (target) {
    target.status = true;
  }
});
arr1
为起点,可以使用
map
方法。这将使新阵列就位,考虑到angular的变化检测系统,这通常是一件好事:

arr1 = arr1.map((item) => ({
  ...item,
  status: arr2.some(({ id }) => item.id === id)
});
这也将创建一个新的对象引用。根据您的数据集,性能可能是一个问题,但只有在处理+10.000个对象(取决于对象的复杂性)时才会注意到这一点

如果您不希望在
arr1
上将
状态:true
覆盖为
false
,则需要添加额外的条件:

arr1 = arr1.map((item) => ({
  ...item,
  status: item.status || arr2.some(({ id }) => item.id === id)
});

你尝试过什么,它到底有什么问题?我对angular不太熟悉,所以我找到了很多foreach指南,但我仍然感到困惑,所以我不知道如何循环这两个数组并进行比较。这里没有特定于angular的内容,这只是基本的JavaScript。什么指南,以及你是如何尝试使其适应你的需要的?你可以用javascript来做,因为我对javascript也是完全陌生的…所以我真的需要一些示例代码和指南…我在这个问题上非常紧迫,谢谢guysHi,刚才我发现了我犯的一些错误。现在剩下的唯一问题是如何在正确获取目标后更新arr1?