JavaScript新手技术问询:如何根据布尔数组过滤字符串数组
问题解决:根据布尔数组过滤字符串数组
错误原因
你写的arr1.filter(item => arr2[item])逻辑有误:item是arr1里的字符串元素(比如"Apple"),用它作为索引访问arr2时,JavaScript无法将这些字符串转换为有效的数字索引,最终得到的是undefined,而undefined在布尔判断中等同于false,所以过滤结果为空。
解决方案
filter方法的回调函数支持第二个参数当前元素的索引(index),我们可以通过索引对应arr2里的布尔值来判断是否保留元素:
const arr1 = ["Apple", "Banana", "Orange"]; const arr2 = [false, true, false]; const filteredArr = arr1.filter((_, index) => arr2[index]); console.log(filteredArr); // 输出: ["Banana"]
(这里用下划线_表示不需要用到的item参数,是JavaScript里的常见写法)
如果需要更灵活的处理,也可以用reduce实现:
const filteredArr = arr1.reduce((result, item, index) => { arr2[index] && result.push(item); return result; }, []);
内容的提问来源于stack exchange,提问作者Wen Ma
相关产品推荐
相关产品推荐

