基于两个数组创建指定布尔数组的最高效实现方案
高效实现方案
要实现这个需求,最高效低资源的方式是利用Set的O(1)查找特性,避免重复遍历或冗余操作,具体步骤如下:
- 先把arrayB转换成Set,自动去重(如果arrayB有重复索引的话,避免重复赋值浪费资源),同时让索引查找速度拉满:
const indexSet = new Set(arrayB);
- 生成arrayC有两种高效写法:
写法一:直接映射生成
用Array.from一次性生成目标数组,逻辑清晰且高效:
const arrayC = Array.from({ length: arrayA.length }, (_, index) => indexSet.has(index));
写法二:先填充再修改
先创建全false数组,再遍历Set修改指定索引,内存占用和性能和写法一接近,适合需要先初始化再做其他操作的场景:
const arrayC = new Array(arrayA.length).fill(false); indexSet.forEach(idx => arrayC[idx] = true);
性能对比
- 传统的forEach/for循环遍历arrayB赋值:如果arrayB存在重复索引,会做重复赋值操作;且每次查找(如果是遍历比对的话)是O(n)。
- 用Set的方式:查找是O(1),自动去重,不管arrayB多大,索引判断都极快,数据量越大,性能优势越明显。
内容的提问来源于stack exchange,提问作者SolisQuid
相关产品推荐
相关产品推荐

