Google Apps Script中arr.filter()方法失效问题排查求助
问题分析与解决
你的代码无法得到预期结果的核心原因是类型不匹配与引用类型的比较逻辑:
arr1中的每个元素是一维数组(比如[1]),item[0]取出的是原始数字(比如1);arr2中的元素同样是一维数组(比如[2]),includes()方法会进行严格相等比较(===),数字和数组属于不同类型,永远不会匹配,因此过滤结果为空。- 额外补充:即使你直接用
arr2.includes([2])也会返回false,因为数组是引用类型,两个独立的数组对象哪怕内容完全相同,引用地址不同就不会被判定为相等。
修复方案
方案1:将arr2转换为一维数字数组
把arr2从二维数组转成存储数字的一维数组,这样就能和item[0]的数字直接匹配:
var arr1 = [[1],[2],[3],[4]], arr2 = [[2],[4]].map(item => item[0]), // 转换为 [2,4] res = arr1.filter( item => arr2.includes( item[0] ) ); Logger.log(res); // 输出 [[2],[4]]
方案2:保留arr2结构,通过内容匹配
如果需要保留arr2的二维结构,可以用some()遍历arr2,对比数组内的具体值:
var arr1 = [[1],[2],[3],[4]], arr2 = [[2],[4]], res = arr1.filter(item => arr2.some(arr => arr[0] === item[0])); Logger.log(res); // 输出 [[2],[4]]
内容的提问来源于stack exchange,提问作者Андрей Бондаренко
相关产品推荐
相关产品推荐

