React Native中如何判断两个数组是否存在完全匹配的元素?
问题根源
你大概率是把数组转换成了逗号分隔的字符串,然后误用了字符串的includes()方法,而不是数组的includes()。字符串的includes()是检查子串是否存在,所以"36"会被误判为存在于"5,13,28,136,400,538"中——因为"136"里包含"36"这个子串,这就是你看到的错误匹配。
解决方案
要实现精确的数组元素匹配,你需要确保两个都是真正的数组,并且元素类型一致(要么都是数字,要么都是字符串),然后使用数组的includes()方法(它使用SameValueZero进行精确比较,和===几乎一致)。
步骤1:正确映射你的数据
从你提供的原始数据结构来看,先把postid转成数字(或保持字符串,只要两边统一):
// 处理result_postid:从原始数组转成数字数组 const originalResultData = [{"spaceid":"16","postid":"10"},{"spaceid":"16","postid":"22"},{"spaceid":"16","postid":"12"},{"spaceid":"16","postid":"36"},{"spaceid":"16","postid":"45"},{"spaceid":"16","postid":"206"}]; const result_postid = originalResultData.map(item => Number(item.postid)); // 转成数字数组 // 确保item.id也是数字类型(如果原本是字符串,也统一转成数字) const itemIds = yourItemData.map(item => Number(item.id));
步骤2:使用数组的includes进行精确匹配
你的判断代码可以保持结构,但要确保传入的item.id类型和数组元素一致:
{result_postid.includes(Number(item.id)) ? <Text>True</Text> : <Text>False</Text>}
如果更倾向于使用字符串类型(比如ID可能包含字母),就统一转成字符串:
const result_postid = originalResultData.map(item => item.postid); // 字符串数组 const itemIds = yourItemData.map(item => String(item.id)); // 转成字符串数组
然后判断代码:
{result_postid.includes(String(item.id)) ? <Text>True</Text> : <Text>False</Text>}
验证一下
用你的测试数据验证:
const result_postid = [10,22,12,36,45,206]; console.log(result_postid.includes(36)); // true(正确匹配) console.log(result_postid.includes(136)); // false(正确不匹配,这就是你想要的结果)
为什么之前的代码出错?
如果你之前是把数组转成了逗号分隔的字符串(比如result_postid.join(',')),然后调用includes(),实际上是调用了字符串的方法。例如:
const wrongItemIdStr = "5,13,28,136,400,538"; console.log(wrongItemIdStr.includes("36")); // true!因为"136"里包含"36"子串,这就是误匹配的原因。
内容的提问来源于stack exchange,提问作者Laney Williams
相关产品推荐
相关产品推荐

