gpt4 book ai didi

javascript - 当有 2 个数组要检查或比较时使用 javascript 过滤

转载 作者:行者123 更新时间:2023-11-30 14:18:54 25 4
gpt4 key购买 nike

当我有两个大对象并且必须在过滤过程中比较它们时,我在使用 javascript 中的过滤方法时遇到了一些问题。

为简单起见,我创建了一个示例,其中我们有两个数组:array_1 和 array_2。

Array_2 应该根据 array_1 中存在的 id 进行过滤。 (这些 id 在每个数组中都是相同的)

let array_1 = [
{ id: '_i23455szq', description: 'text' },
{ id: '_h6yf2uk1n', description: 'text' }
]

let array_2 = [
{ id: '_h6yf2uk1n', description: 'text', capacity: 2 },
{ id: '_465324423', description: 'text', capacity: 4 },
{ id: '_i23455szq', description: 'text', capacity: 0 },
{ id: '_54234gfgd', description: 'text', capacity: 0 },
]

如您所见,在 array_2 中我们有一个容量集。我正在尝试根据容量进行过滤,我想过滤 array_2 所以在过滤之后,它包括每个具有容量的对象(高于 0,但也包括那些与 array_1 中的 once 匹配的对象)

如果你应该在没有太多 for 循环的情况下做出一个很好的解决方案,那如何才能做到这一点?

这甚至可以在 1-2 行中实现吗?

已尝试在内部使用过滤和 forEach,但似乎无法创建一个简单的解决方案,即不占用太多空间。

array_2 = array_2.filter(function (i) {
array_1.forEach(j => {
if (j.id == i.id) {
console.log("ID matches")
// How to return??
}
})
})

输出应该是以下对象:

{ id: '_h6yf2uk1n', description: 'text', capacity: 2 },
{ id: '_465324423', description: 'text', capacity: 4 },
{ id: '_i23455szq', description: 'text', capacity: 0 },

最佳答案

可能最好预先制作一个 array_1idSet(Set 查找很多比任何其他类型的 .some/indexOf 数组查找都快)。然后,你只需要.filter,从array2中提取idcapacity属性,检查看看如果 id 在 Set of ids 中,或者容量大于 0。这具有 O(N) 的复杂度,同时使用像 这样的数组方法>.some.filter 中会有 O(N^2):

let array1 = [
{ id: '_i23455szq', description: 'text' },
{ id: '_h6yf2uk1n', description: 'text' }
]

let array2 = [
{ id: '_h6yf2uk1n', description: 'text', capacity: 2 },
{ id: '_465324423', description: 'text', capacity: 4 },
{ id: '_i23455szq', description: 'text', capacity: 0 },
{ id: '_54234gfgd', description: 'text', capacity: 0 },
]

const ids = new Set(array1.map(({ id }) => id));
console.log(
array2.filter(({ id, capacity }) => ids.has(id) || capacity > 0)
);

关于javascript - 当有 2 个数组要检查或比较时使用 javascript 过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53070773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com