A报表传递形式有很深的 struct .每种形式都有自己的格式,每种格式都有自己的频率.

 const forms = [
      {
        value: "1",
        label: 'Email',
        formats: [
          {
            value: '1',
            label: 'PDF',
            frequency: [
              {
                value: 'D',
                label: 'Daily',
              },
              {
                value: 'W',
                label: 'Weekly',
              },
            ],
          },
          {
            value: '2',
            label: 'XML',
            frequency: [
              {
                value: 'D',
                label: 'Daily',
              },
            ],
          },
        ],
      },
      {
        value: '2',
        label: 'Post',
        formats: [
          {
            value: '1',
            label: 'PDF',
            frequency: [
              {
                value: 'D',
                label: 'Daily',
              },
              {
                value: 'W',
                label: 'Weekly',
              },
            ],
          },
          {
            value: '2',
            label: 'XML',
            frequency: [
              {
                value: 'D',
                label: 'Daily',
              },
            ],
          },
        ],
      },
    ];

我还有另一个数组,其中包含表示表单 struct 的限制/规则的对象.现在我需要以某种方式循环每个选项,并将其与这些限制进行比较.如果该选项将与限制对象之一具有相同的值(形式、格式和频率),则该特定选项将从 struct 中移除,或者将基于隐藏值保留在那里.我如何才能做到这一点,或者我应该使用什么策略?

const restrictions = [
  {form: '1', format: '1', frequency: 'D', hide: false},
  {form: '1', format: '2', frequency: 'W', hide: true},
  {form: '2', format: '1', frequency: 'D', hide: true},
  {form: '2', format: '2', frequency: 'W', hide: false},
]

推荐答案

您可以使用析构赋值来压缩代码:

const forms = [{"value":"1","label":"Email","formats":[{"value":"1","label":"PDF","frequency":[{"value":"D","label":"Daily"},{"value":"W","label":"Weekly"}]},{"value":"2","label":"XML","frequency":[{"value":"D","label":"Daily"}]}]},{"value":"2","label":"Post","formats":[{"value":"1","label":"PDF","frequency":[{"value":"D","label":"Daily"},{"value":"W","label":"Weekly"}]},{"value":"2","label":"XML","frequency":[{"value":"D","label":"Daily"}]}]}]

const restrictions = [
  {form: '1', format: '1', frequency: 'D', hide: false},
  {form: '1', format: '2', frequency: 'W', hide: true},
  {form: '2', format: '1', frequency: 'D', hide: true},
  {form: '2', format: '2', frequency: 'W', hide: false},
]

filteredForms = forms.map(({value: x, label, formats}) =>
  ({value: x, label, formats: formats.map(({value: y, label, frequency}) =>
      ({value: y, label, frequency: frequency.filter(({value: z}) =>
          restrictions.some(({form: xx, format: yy, frequency: zz, hide}) =>
            !hide && x===xx && y===yy && z===zz
))}))}))

console.log(filteredForms)

Javascript相关问答推荐

使用jsPDF添加Image JPEG将p5.js草图画布下载为PDF

可以将SuperTest导入为ES 6模块吗?

使脚本兼容于其他YouTube URL格式

promise .all()永不解决

为什么这个自定义组件会被放置在TR之外?

如何在react + react路由域名中使用DeliverBrowserRouter?

如何制作删除按钮以从列表中删除该项目所属的项目?

TypScript界面中的Infer React子props

docx.js:如何在客户端使用文档修补程序

如何在Javascript中的控制台上以一行形式打印循环的结果

如何在Obsidian dataview中创建进度条

配置WebAssembly/Emscripten本地生成问题

JSDoc创建并从另一个文件导入类型

我在Django中的视图中遇到多值键错误

如何将未排序的元素追加到数组的末尾?

如何在Svelte中从一个codec函数中调用error()?

为什么我的按钮没有从&q;1更改为&q;X&q;?

<;img>;标记无法呈现图像

无法读取未定义的属性(正在读取合并)-react RTK

如何使用<;Link>;执行与JS Reaction中的";window.Location=/GameOverDied;";类似的操作?