如何在Postman的JS测试中筛选嵌套数组product_option_values含特定值的对象
解决方案
你最初筛选存在product_option_values数组的写法是正确的,这部分逻辑可以直接复用。
你后续尝试的写法存在两个问题:
- JS中对象属性访问不支持
["product_option_values", 0, "name"]这种逗号分隔多参数的写法,逗号运算符会忽略前面的所有参数,最终等价于访问fs.associations["name"],自然无法拿到正确值 - 固定取下标
0只能判断数组第一个元素是否符合要求,无法匹配数组任意位置的符合条件的元素
你可以搭配数组的some()方法完成需求,some()会遍历目标数组,只要有任意一个元素满足判断条件就会返回true,刚好匹配你要的「数组包含特定值」的筛选逻辑,完整代码如下:
// 定义你要匹配的目标值,可根据需求修改 const targetValue = "S"; const filterSmall = jsonData.products.filter(fs => { // 兼容不存在product_option_values的情况,避免报错 const optionValues = fs.associations?.product_option_values; if (!Array.isArray(optionValues)) return false; // 遍历数组判断是否有元素符合条件 return optionValues.some(item => item.name === targetValue); });
如果运行时报可选链?.的语法错误,可以将取值逻辑替换为兼容写法:
const optionValues = fs.associations && fs.associations.product_option_values;
如果你的筛选条件是匹配product_option_values的id而非name,只需要将some()内部的判断条件修改为对应字段即可,注意你示例中products下的product_option_values的id为字符串类型,匹配时需要注意类型一致。
内容的提问来源于stack exchange,提问作者magster
相关产品推荐
相关产品推荐

