You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据viewStatus过滤product数组并匹配status.json指定字段

解决方案

步骤1:定义不同视图对应的保留字段

根据viewStatus确定需要保留的字段集合:

const getKeepFields = (viewStatus) => {
  switch(viewStatus) {
    case 'grid':
      return ['color', 'height'];
    case 'inline':
      return ['color', 'size', 'capacity'];
    default:
      return []; // 默认不保留任何字段,可按需调整
  }
};

步骤2:递归处理product数组(支持多层子数组)

由于product可能包含嵌套子数组,需要递归遍历每个元素,对对象进行字段过滤:

const filterProduct = (product, keepFields) => {
  return product.map(item => {
    // 若为数组,递归处理子数组
    if (Array.isArray(item)) {
      return filterProduct(item, keepFields);
    }
    // 若为对象,仅保留指定字段
    if (typeof item === 'object' && item !== null) {
      return keepFields.reduce((acc, field) => {
        if (item.hasOwnProperty(field)) {
          acc[field] = item[field];
        }
        return acc;
      }, {});
    }
    // 非数组非对象的元素直接返回
    return item;
  });
};

步骤3:整合使用

结合viewStatus调用函数,得到过滤后的结果:

// 假设已获取status、product、viewStatus变量
const keepFields = getKeepFields(viewStatus);
const filteredProduct = filterProduct(product, keepFields);

// 输出结果
console.log(filteredProduct);

对你现有代码的说明

你之前的代码仅实现了数据打印,未完成字段过滤需求。上述方案解决了两个核心问题:

  • 递归处理多层嵌套的子数组结构
  • 根据视图状态动态保留指定字段

当viewStatus === 'grid'时,过滤后的结果会仅保留每个对象中的color和height字段,符合预期要求。

内容的提问来源于stack exchange,提问作者Gleb Pristupa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 03:31:06