首页 > 解决方案 > 推送到数组取决于选项

问题描述

那是选项对象:

const options = {
  groupZ: true, groupY: true,
  category1: true, category2: true, category3: true,
  Zcategory1: true, Zcategory2: true, Zcategory3: true, Zcategory4: true,
  Ycategory1: true, Ycategory2: true, Ycategory3: true, Ycategory5: true
}

这就是我构建响应对象的方式:

{
  ...groupZ && {
    ...Zcategory1 && { /* stuff */ }
    ...Zcategory2 && { /* stuff */ }
    ...Zcategory3 && { /* stuff */ }
    ...Zcategory4 && { /* stuff */ }
  },
  ...groupY && {
    ...Ycategory1 && { /* stuff */ }
    ...Ycategory2 && { /* stuff */ }
    ...Ycategory3 && { /* stuff */ }
    ...Ycategory5 && { /* stuff */ }
  }
}

所以我需要填充数组取决于我得到的选项:

const array = [];
// if all options is true
// pushing every example functions I got
array.push(
  ExampleFunction1('param1'); // will return array of strings
  ExampleFunction1('param2');
  ExampleFunction2();
  ExampleFunction3();
  ExampleFunction4('param1');
  ExampleFunction4('param2');
  ExampleFunction5('param1');
  ExampleFunction5('param2');
);

// if Ycategory2 is false, push everything but ExampleFunction5('param2');
array.push(
  ExampleFunction1('param1'); // will return array of strings
  ExampleFunction1('param2');
  ExampleFunction2();
  ExampleFunction3();
  ExampleFunction4('param1');
  ExampleFunction4('param2');
  ExampleFunction5('param1');
  // ExampleFunction5('param2'); remove that
);

// if groupY if false:
array.push(
  ExampleFunction1('param1'); // will return array of strings
  // ExampleFunction1('param2');
  ExampleFunction2(); // keep that
  // ExampleFunction3();
  ExampleFunction4('param1');
  // ExampleFunction4('param2');
  ExampleFunction5('param1');
  // ExampleFunction5('param2'); remove that
);

逻辑:

true默认所有选项

if Zcategory2isfalse例如,忽略category2选项

groupZ如果除了and之外的任何选项groupY是错误的,请忽略groupZandgroupY

如果groupZ为假,则忽略Z(Zcategory1、Zcategory2 等)的所有内容,与groupY

我希望有足够的信息。

此外,我不想要 100 行代码,if else因为这会使代码不可读,而这正是我现在所拥有的。

示例/我现在拥有的:

if (options.groupZ === false && options.category1 === false && options.Zcategory1 === true) array.push(ExampleFunction5('param1'))
if (options.groupZ === false && options.category2 === false && options.Zcategory2 === true) array.push(ExampleFunction2()
if (options.groupZ === false && options.category3 === false && options.Zcategory3 === true) array.push(ExampleFunction1('param1'))
if (options.groupZ === false && options.Zcategory3 === true) array.push(ExampleFunction4('param1'))

if (options.groupY === false && options.category1 === false && options.Zcategory1 === true) array.push(ExampleFunction5('param2'))
if (options.groupY === false && options.category2 === false && options.Zcategory2 === true) array.push(ExampleFunction3()
if (options.groupY === false && options.category3 === false && options.Zcategory3 === true) array.push(ExampleFunction1('param2'))
if (options.groupY === false && options.Zcategory3 === true) array.push(ExampleFunction4('param2'))

if (options.category1 === true) array.push(ExampleFunction5('param1'), ExampleFunction5('param2'))
if (options.category2 === true) array.push(ExampleFunction2(), ExampleFunction3())
if (options.category3 === true) array.push(ExampleFunction1('param1'), ExampleFunction1('param'))

if (options.groupZ) array.push(
  ExampleFunction1('param1'),
  ExampleFunction2(),
  ExampleFunction4('param1'),
  ExampleFunction5('param1')
)

if (options.groupY) array.push(
  ExampleFunction1('param2'),
  ExampleFunction3(),
  ExampleFunction4('param2'),
  ExampleFunction5('param2')
)

标签: javascriptarraysnode.jsobjectlogic

解决方案


推荐阅读