Javascript 角度比较数组并更新其中一个
我有这两组数组,我需要比较它们,如果第2个数组中的对象在第1个数组中找到,我需要将第1个数组中的状态更新为true。关于如何按摩数据,谢谢 下面是数组的示例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} ]; 即使您自己没有提供任何(错误的)代码,但我理解有时甚至很难从这样的事情开
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?