React中如何判断数组是否包含另一对象数组的所有ID值?
解决React中判断数组是否包含另一对象数组所有ID的问题
首先咱们先拆解下你原来代码的问题:
Array.includes()方法接收的是具体值,不是回调函数,所以你传入的箭头函数根本不会生效secondArray.map(item => item.id)会返回一个新数组,includes没法直接判断第一个数组是否包含这个新数组里的所有元素
下面给你两种实用的实现方式,都能直接返回布尔值:
方法一:用every() + includes()组合(逻辑直观)
核心思路是先把第二个数组的ID提取出来,再逐个检查这些ID是否都存在于第一个数组中(注意统一类型,你的第一个数组是字符串ID,第二个是数字ID,不转换的话会匹配失败):
compareTwoArrays = () => { // 提取第二个数组的ID并转为字符串,和firstArray的类型保持一致 const secondIds = this.state.secondArray.map(item => String(item.id)); // 检查所有ID是否都在firstArray里 return secondIds.every(id => this.state.firstArray.includes(id)); };
方法二:用Set优化性能(数组较大时推荐)
如果你的数组元素很多,用Set可以把查找时间从O(n)降到O(1),效率更高:
compareTwoArrays = () => { // 把firstArray转成Set,提升查找速度 const firstSet = new Set(this.state.firstArray); const secondIds = this.state.secondArray.map(item => String(item.id)); return secondIds.every(id => firstSet.has(id)); };
测试示例验证
用你给出的例子测试:
- 当
firstArray: ["1"],secondArray: [{id:1, name: 'Joe'}, {id:2, name: 'Bill'}, {id:3, name: 'Jason'}]时,提取出的secondIds是["1", "2", "3"],检查后会返回false - 如果把
firstArray改成["1", "2", "3"],就会返回true
内容的提问来源于stack exchange,提问作者Valentin Georgiev
相关产品推荐
相关产品推荐

