在有2个数组要检查或比较时使用javascript过滤
当我有两个大对象并且必须在过滤过程中比较它们时,在javascript中使用过滤方法会遇到一些问题 为了简单起见,我创建了一个示例,其中有两个数组:array_1和array_2 应根据数组_1中存在的id筛选数组_2。(每个阵列中的这些id相同) 如您所见,在数组_2中,我们有一个容量集。我正在尝试基于容量进行过滤,我想过滤数组_2,因此在过滤之后,它包括每个具有容量的对象(大于0,但也包括与一次性数组_1匹配的对象) 如果您应该在没有太多for循环的情况下创建一个很好的解决方案,那么如何做到这一点呢 这在1-2行中都可能吗 已经尝试过内部的过滤和forEach,但似乎无法创建一个简单的解决方案,即不要占用太多空间在有2个数组要检查或比较时使用javascript过滤,javascript,arrays,sorting,filtering,Javascript,Arrays,Sorting,Filtering,当我有两个大对象并且必须在过滤过程中比较它们时,在javascript中使用过滤方法会遇到一些问题 为了简单起见,我创建了一个示例,其中有两个数组:array_1和array_2 应根据数组_1中存在的id筛选数组_2。(每个阵列中的这些id相同) 如您所见,在数组_2中,我们有一个容量集。我正在尝试基于容量进行过滤,我想过滤数组_2,因此在过滤之后,它包括每个具有容量的对象(大于0,但也包括与一次性数组_1匹配的对象) 如果您应该在没有太多for循环的情况下创建一个很好的解决方案,那么如何做到
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 },
您正在筛选器中查找两个条件的逻辑OR(
|
)。首先检查容量,以便在容量>0
时无需搜索数组_1
。如果capacity
不大于0
,则可以在array\u 1
中搜索具有相同id
的对象
const数组_1=[
{id:''ui23455szq',说明:'text'},
{id:''uh6yf2uk1n',说明:'text'}
]
常量数组_2=[
{id:''uh6yf2uk1n',说明:'text',容量:2},
{id:''u 465324423',说明:'text',容量:4},
{id:'_i23455szq',说明:'text',容量:0},
{id:''u 54234gfgd',说明:'text',容量:0},
]
常量结果=数组_2.过滤器(obj=>
obj.capacity>0 | |数组1.some({id})=>id==obj.id)
);
控制台日志(结果)
可能最好提前对数组1
的id
进行设置(Set
查找比任何其他类型的查找快得多。一些/数组查找的索引)。然后,您只需要.filter
,从array2
中提取id
和capacity
属性,并检查id
是否在id集合中,或者容量是否大于0。当使用像这样的数组方法时,它的复杂性是O(N)
。在中的一些。过滤器将具有O(N^2)
:
让数组1=[
{id:''ui23455szq',说明:'text'},
{id:''uh6yf2uk1n',说明:'text'}
]
设array2=[
{id:''uh6yf2uk1n',说明:'text',容量:2},
{id:''u 465324423',说明:'text',容量:4},
{id:'_i23455szq',说明:'text',容量:0},
{id:''u 54234gfgd',说明:'text',容量:0},
]
const-id=新集合(array1.map(({id})=>id));
console.log(
array2.filter(({id,capacity})=>ids.has(id)| capacity>0)
);代码>array_2=array_2.filter(i=>i.capacity | | array_1.some(j=>i.id==j.id)) 为什么包括第二个对象,id\u 465324423
在第一个数组中不存在?因为它的容量大于0,所以如果一个匹配arrray\u 1但容量为0,那么它也应该包括在内。啊,所以条件是or,而不是and,得到了绝对漂亮的答案,快速而简短。谢谢,祝您愉快,先生。欢迎光临SO!你能解释一下你想说什么吗?
{ id: '_h6yf2uk1n', description: 'text', capacity: 2 },
{ id: '_465324423', description: 'text', capacity: 4 },
{ id: '_i23455szq', description: 'text', capacity: 0 },