如何判断数组links的gridId属性值是否存在于数组linksElem中?返回布尔值
检查数组属性值是否存在的实现方案
需求:判断数组links中元素的gridId属性(对应代码里的g字段)是否有任意一个存在于数组linksElem的元素gridId中,返回布尔值。
原代码的问题
原代码存在两处关键问题:
- 数组
l(对应linksElem)的定义未闭合,存在语法错误; - 判断逻辑错误:
el.gr是不存在的属性名,且l.g试图直接访问数组的g属性,这是错误的写法(数组本身没有该属性)。
正确实现代码
// 修正语法后的目标数组(对应需求中的links和linksElem) const links = [ { g: 10, conon: {} }, { g: 10, conon: {} }, { g: 10, conon: {} }, { g: 10, conon: {} }, ]; const linksElem = [ { g: 10, conon: {} } ]; // 提取linksElem中所有的g值存入Set,优化查找效率 const elemGSet = new Set(linksElem.map(item => item.g)); // 检查links中是否有元素的g值存在于elemGSet里 const res = links.some(item => elemGSet.has(item.g)); console.log(res); // 输出true
逻辑说明
- 先用
map提取linksElem里所有元素的g值,存入Set结构——Set的has方法查找效率为O(1),比反复遍历数组更高效,尤其适合大数据量场景; - 调用
links.some()方法遍历数组,只要有一个元素的g值能在Set中找到,就立即返回true,遍历结束后没找到则返回false。
内容的提问来源于stack exchange,提问作者Marizona
相关产品推荐
相关产品推荐

