Apps Script对象遍历问题:筛选最后一个匹配/不匹配值
解决方案
先修正基础语法错误
你给出的对象和数组定义存在语法问题,需要先调整:
- 数组元素如果是字符串,必须加引号,否则会被当作未定义变量
- 对象的键值对要用冒号
:分隔,而不是等号=
修正后的定义:
var Concat_names = ["a", "b", "c"]; var Concat_rows = {a: "D45", d: "D64", e: "D72", f: "D90"};
实现需求的核心逻辑
你的需求是针对对象的最后一个键,判断数组中的每个元素是否和它匹配,再分别存入对应数组。原代码的嵌套循环会遍历所有键值对,完全不符合需求,需要重新梳理逻辑:
- 先提取对象的最后一个键:通过
Object.keys()获取所有键的数组,再取最后一个元素 - 遍历数组中的每个元素,和这个最后一个键做对比
- 根据匹配结果,将最后一个键对应的数值存入目标数组
完整代码:
var Concat_names = ["a", "b", "c"]; var Concat_rows = {a: "D45", d: "D64", e: "D72", f: "D90"}; var Last_CellnoMatch = []; var Lact_CellisMatch = []; // 注意这里可能是笔误,建议改为Last_CellIsMatch // 获取对象的最后一个键及对应值 const keys = Object.keys(Concat_rows); const lastKey = keys[keys.length - 1]; // 也可以用ES2022语法:keys.at(-1) const lastValue = Concat_rows[lastKey]; // 遍历数组元素做判断 for (const name of Concat_names) { if (name !== lastKey) { Last_CellnoMatch.push(lastValue); } else { Lact_CellisMatch.push(lastValue); } } // 输出结果 Logger.log("Last_CellnoMatch:", Last_CellnoMatch); // 示例中会输出 ["D90", "D90", "D90"] Logger.log("Lact_CellisMatch:", Lact_CellisMatch); // 示例中为空数组
逻辑说明
- 示例中对象的最后一个键是
"f",对应值是"D90" - 数组中的
"a"、"b"、"c"都和"f"不匹配,所以全部存入Last_CellnoMatch,最终数组包含三个"D90" - 如果数组中存在
"f",则该元素对应的"D90"会存入Lact_CellisMatch
内容的提问来源于stack exchange,提问作者user20629456
相关产品推荐
相关产品推荐

