【问题标题】:nested filter array javascript嵌套过滤器数组 javascript
【发布时间】:2022-08-19 05:19:58
【问题描述】:

我想在js中创建一个嵌套过滤器 当我过滤我的数组主要数据时受到影响和更改,但我需要初步数据来删除过滤器

我的js代码:

    let result = companies;
     result.map((item, i) => {212
           let rows = [...result[i].table.table_rows].filter((item3) => {
              return Object.keys(item3).some(i => item3[i][key] === value[key]);
           });
                      
           result[i].table.table_rows = [...rows];
           return result[i];
        });
      arrayFilter(result);

我的数据是:

{
  \"companies\": [
    {
      \"company\": {
        \"name\": \"company 1\"
      },
      \"table\": {
        \"table_rows\": [
          {
            \"cells\": {
              \"product_name\": \"prod1\",
              \"pa_size\": \"12\"
            }
          },
          {
            \"cells\": {
              \"product_name\": \"prod2\",
              \"pa_size\": \"15\"
            }
          }
        ]
      }
    },
    {
      \"company\": {
        \"name\": \"company 2\"
      },
      \"table\": {
        \"table_rows\": [
          {
            \"cells\": {
              \"product_name\": \"prod2-1\",
              \"pa_size\": \"12\"
            }
          },
          {
            \"cells\": {
              \"product_name\": \"prod2-2\",
              \"pa_size\": \"18\"
            }
          }
        ]
      }
    }
  ]
}

我尝试了很多方法来解决这个问题,但我没有得到正确的答案

  • 那么为什么要更改原始数据而不是创建新数据呢?
  • 我更新了我的代码,我没有更改原始数据
  • 您确实更改了原始的 companies 数组。赋值let result = companies; 不会创建新数组,result 只是指向现有的companies 数组。如果你想在不接触companies 的情况下操作result,那么你应该克隆/复制数组,例如let result = [...companies];

标签: javascript


【解决方案1】:

你的问题不清楚,我明白你想过滤位于每个公司数组对象内的数组“table_rows”? map 和 filter 返回新数组,因此解决方案是:

result = result.companies.map((item, i) => {
   const newItem = {...item};
   let rows = newItem .table.table_rows.filter((item3) => {
      return Object.keys(item3).some(i => item3[i][key] === value[key]);
   });
              
   newItem.table_rows = [...rows];
   return newItem ;
});
arrayFilter(result);

【讨论】:

  • 我使用了您发送的代码,但原始数据仍然更改
猜你喜欢
  • 1970-01-01
  • 2020-08-25
  • 1970-01-01
  • 2016-10-28
  • 1970-01-01
  • 2019-05-24
  • 1970-01-01
  • 2022-08-17
  • 2017-01-28
相关资源
最近更新 更多