【问题标题】:How can I pass a condition into my function?如何将条件传递到我的函数中?
【发布时间】:2023-01-27 20:47:12
【问题描述】:

这是我的功能: 我想传递一个条件来更改第 7 行中的“selectedConformityStatus”。

const externalFilter = function () {
  if (!__externalFilter) {
    __externalFilter = {
      gridApi: undefined,
      selectedSubjects: [],
      selectedGeneralRequirement: "my_responsibility",
      selectedConformityStatus: [
        "conforms",
        "no_conforms",
        "not_applicable",
        "initial_status",
      ],
      selectedAnalysisResultStatus: "all",
      isExternalFilterPresent: function (params) {
        return (
          (this.selectedSubjects && this.selectedSubjects.length > 0) ||
          this.selectedGeneralRequirement !== "all" ||
          this.selectedConformityStatus.length > 0 ||
          this.selectedAnalysisResultStatus !== "all"
        );
      },
      doesExternalFilterPass: function (node) {
        const systemOperatorId = _.get(this, "loggedUser.systemOperatorId");

        let systemOperator_AllRequirements = false,
          systemOperator_Requirements = [];

        if (systemOperatorId) {
          const systemOperatorEntry = _.get(
            this.project,
            "systemOperators",
            []
          ).find((s) => _.get(s, "systemOperator._id") === systemOperatorId);

          if (systemOperatorEntry) {
            systemOperator_AllRequirements =
              systemOperatorEntry.allRequirements === "yes";
            systemOperator_Requirements =
              systemOperatorEntry.requirements || [];
          }
        }

        const subjectCondition =
          !this.selectedSubjects ||
          this.selectedSubjects.length === 0 ||
          this.selectedSubjects.includes(
            _.get(
              node,
              "data.dataOverride.subject._id",
              _.get(
                node,
                "data.dataOverride.subject",
                _.get(node, "data.requirement.subject._id")
              )
            )
          );
        const generalRequirementCondition =
          !this.selectedGeneralRequirement ||
          this.selectedGeneralRequirement === "all" ||
          (this.selectedGeneralRequirement === "my_responsibility" &&
            (systemOperator_AllRequirements === true ||
              systemOperator_Requirements.some(
                (r) =>
                  _.get(node, "data.requirement.generalRequirement._id") ===
                  r._id
              ))) ||
          _.get(node, "data.requirement.generalRequirement._id") ===
            this.selectedGeneralRequirement;
        const conformityStatusCondition =
          !this.selectedConformityStatus ||
          this.selectedConformityStatus.length === 0 ||
          this.selectedConformityStatus.includes(
            _.get(node, "data.conformityStatus")
          );
        const conformityAnalysisResultStatus =
          !this.selectedAnalysisResultStatus ||
          this.selectedAnalysisResultStatus === "all" ||
          (this.selectedAnalysisResultStatus === "all_awainting_analysis" &&
            [
              "awaiting_analysis",
              "awaiting_correction",
              "awaiting_review",
            ].includes(_.get(node, "data.currentStatus"))) ||
          _.get(node, "data.currentStatus") ===
            this.selectedAnalysisResultStatus;

        return (
          subjectCondition &&
          generalRequirementCondition &&
          conformityStatusCondition &&
          conformityAnalysisResultStatus
        );
      },
      setGridApi: function (params) {
        if (params && params.gridApi) {
          this.gridApi = params.gridApi;
        }
      },
      onChangeSubjects: function (subjects) {
        this.selectedSubjects = subjects || [];
        this.onFilterChanged();
      },
      onChangeGeneralRequirement: function (item) {
        this.selectedGeneralRequirement = item && item.value;
        this.onFilterChanged();
      },
      onChangeConformityStatus: function (value) {
        this.selectedConformityStatus = value;
        this.onFilterChanged();
      },
      onChangeAnalysisResultStatus: function (item) {
        this.selectedAnalysisResultStatus = item && item.value;
        this.onFilterChanged();
      },
      onFilterChanged: function (item) {
        if (this.gridApi) {
          this.gridApi.onFilterChanged();
        }
      },
    };
  }
  return __externalFilter;
};

我想通过一个条件来更改第 7 行中的“选定的符合性状态”。 喜欢,

if (__checklist.project.analysisData?.actionPlan == 'yes') {
  let selectedConformityStatus: [
    "conforms",
    "no_conforms",
    "not_applicable",
    "initial_status",
  ]
} else {
  selectedConformityStatus: [
    "conforms",
    "no_conforms",
    "not_applicable"
  ]
}

我已经这样尝试过,通过 !external Filter 传递条件),但项目失败了。

const externalFilter = function () {
  if (!__externalFilter && __checklist.project.analysisData?.actionPlan == 'yes') {
    __externalFilter = {
      gridApi: undefined,
      selectedSubjects: [],
      selectedGeneralRequirement: "my_responsibility",
      selectedConformityStatus: [
        "conforms",
        "no_conforms",
        "not_applicable",
        "initial_status",
      ],
      selectedAnalysisResultStatus: "all",
      isExternalFilterPresent: function (params) {
        return (
          (this.selectedSubjects && this.selectedSubjects.length > 0) ||
          this.selectedGeneralRequirement !== "all" ||
          this.selectedConformityStatus.length > 0 ||
          this.selectedAnalysisResultStatus !== "all"
        );
      },
      doesExternalFilterPass: function (node) {
        const systemOperatorId = _.get(this, "loggedUser.systemOperatorId");

        let systemOperator_AllRequirements = false,
          systemOperator_Requirements = [];

        if (systemOperatorId) {
          const systemOperatorEntry = _.get(
            this.project,
            "systemOperators",
            []
          ).find((s) => _.get(s, "systemOperator._id") === systemOperatorId);

          if (systemOperatorEntry) {
            systemOperator_AllRequirements =
              systemOperatorEntry.allRequirements === "yes";
            systemOperator_Requirements =
              systemOperatorEntry.requirements || [];
          }
        }

        const subjectCondition =
          !this.selectedSubjects ||
          this.selectedSubjects.length === 0 ||
          this.selectedSubjects.includes(
            _.get(
              node,
              "data.dataOverride.subject._id",
              _.get(
                node,
                "data.dataOverride.subject",
                _.get(node, "data.requirement.subject._id")
              )
            )
          );
        const generalRequirementCondition =
          !this.selectedGeneralRequirement ||
          this.selectedGeneralRequirement === "all" ||
          (this.selectedGeneralRequirement === "my_responsibility" &&
            (systemOperator_AllRequirements === true ||
              systemOperator_Requirements.some(
                (r) =>
                  _.get(node, "data.requirement.generalRequirement._id") ===
                  r._id
              ))) ||
          _.get(node, "data.requirement.generalRequirement._id") ===
            this.selectedGeneralRequirement;
        const conformityStatusCondition =
          !this.selectedConformityStatus ||
          this.selectedConformityStatus.length === 0 ||
          this.selectedConformityStatus.includes(
            _.get(node, "data.conformityStatus")
          );
        const conformityAnalysisResultStatus =
          !this.selectedAnalysisResultStatus ||
          this.selectedAnalysisResultStatus === "all" ||
          (this.selectedAnalysisResultStatus === "all_awainting_analysis" &&
            [
              "awaiting_analysis",
              "awaiting_correction",
              "awaiting_review",
            ].includes(_.get(node, "data.currentStatus"))) ||
          _.get(node, "data.currentStatus") ===
            this.selectedAnalysisResultStatus;

        return (
          subjectCondition &&
          generalRequirementCondition &&
          conformityStatusCondition &&
          conformityAnalysisResultStatus
        );
      },
      setGridApi: function (params) {
        if (params && params.gridApi) {
          this.gridApi = params.gridApi;
        }
      },
      onChangeSubjects: function (subjects) {
        this.selectedSubjects = subjects || [];
        this.onFilterChanged();
      },
      onChangeGeneralRequirement: function (item) {
        this.selectedGeneralRequirement = item && item.value;
        this.onFilterChanged();
      },
      onChangeConformityStatus: function (value) {
        this.selectedConformityStatus = value;
        this.onFilterChanged();
      },
      onChangeAnalysisResultStatus: function (item) {
        this.selectedAnalysisResultStatus = item && item.value;
        this.onFilterChanged();
      },
      onFilterChanged: function (item) {
        if (this.gridApi) {
          this.gridApi.onFilterChanged();
        }
      },
    };
  } else {
    __externalFilter = {
      gridApi: undefined,
      selectedSubjects: [],
      selectedGeneralRequirement: "my_responsibility",
      selectedConformityStatus: [
        "conforms",
        "no_conforms",
        "not_applicable",
      ],
      selectedAnalysisResultStatus: "all",
      isExternalFilterPresent: function (params) {
        return (
          (this.selectedSubjects && this.selectedSubjects.length > 0) ||
          this.selectedGeneralRequirement !== "all" ||
          this.selectedConformityStatus.length > 0 ||
          this.selectedAnalysisResultStatus !== "all"
        );
      },
      doesExternalFilterPass: function (node) {
        const systemOperatorId = _.get(this, "loggedUser.systemOperatorId");

        let systemOperator_AllRequirements = false,
          systemOperator_Requirements = [];

        if (systemOperatorId) {
          const systemOperatorEntry = _.get(
            this.project,
            "systemOperators",
            []
          ).find((s) => _.get(s, "systemOperator._id") === systemOperatorId);

          if (systemOperatorEntry) {
            systemOperator_AllRequirements =
              systemOperatorEntry.allRequirements === "yes";
            systemOperator_Requirements =
              systemOperatorEntry.requirements || [];
          }
        }

        const subjectCondition =
          !this.selectedSubjects ||
          this.selectedSubjects.length === 0 ||
          this.selectedSubjects.includes(
            _.get(
              node,
              "data.dataOverride.subject._id",
              _.get(
                node,
                "data.dataOverride.subject",
                _.get(node, "data.requirement.subject._id")
              )
            )
          );
        const generalRequirementCondition =
          !this.selectedGeneralRequirement ||
          this.selectedGeneralRequirement === "all" ||
          (this.selectedGeneralRequirement === "my_responsibility" &&
            (systemOperator_AllRequirements === true ||
              systemOperator_Requirements.some(
                (r) =>
                  _.get(node, "data.requirement.generalRequirement._id") ===
                  r._id
              ))) ||
          _.get(node, "data.requirement.generalRequirement._id") ===
            this.selectedGeneralRequirement;
        const conformityStatusCondition =
          !this.selectedConformityStatus ||
          this.selectedConformityStatus.length === 0 ||
          this.selectedConformityStatus.includes(
            _.get(node, "data.conformityStatus")
          );
        const conformityAnalysisResultStatus =
          !this.selectedAnalysisResultStatus ||
          this.selectedAnalysisResultStatus === "all" ||
          (this.selectedAnalysisResultStatus === "all_awainting_analysis" &&
            [
              "awaiting_analysis",
              "awaiting_correction",
              "awaiting_review",
            ].includes(_.get(node, "data.currentStatus"))) ||
          _.get(node, "data.currentStatus") ===
            this.selectedAnalysisResultStatus;

        return (
          subjectCondition &&
          generalRequirementCondition &&
          conformityStatusCondition &&
          conformityAnalysisResultStatus
        );
      },
      setGridApi: function (params) {
        if (params && params.gridApi) {
          this.gridApi = params.gridApi;
        }
      },
      onChangeSubjects: function (subjects) {
        this.selectedSubjects = subjects || [];
        this.onFilterChanged();
      },
      onChangeGeneralRequirement: function (item) {
        this.selectedGeneralRequirement = item && item.value;
        this.onFilterChanged();
      },
      onChangeConformityStatus: function (value) {
        this.selectedConformityStatus = value;
        this.onFilterChanged();
      },
      onChangeAnalysisResultStatus: function (item) {
        this.selectedAnalysisResultStatus = item && item.value;
        this.onFilterChanged();
      },
      onFilterChanged: function (item) {
        if (this.gridApi) {
          this.gridApi.onFilterChanged();
        }
      },
    };
  }
  return __externalFilter;
};

我想这很简单,但我无法弄清楚。

【问题讨论】:

    标签: javascript function if-statement


    【解决方案1】:

    您可以只创建一个数组并在您的条件中声明它的值

        let selectedConformityStatusArray: [];    
        if (__checklist.project.analysisData?.actionPlan == 'yes') {
              selectedConformityStatusArray: [
                "conforms",
                "no_conforms",
                "not_applicable",
                "initial_status",
              ]
            } else {
              selectedConformityStatusArray: [
                "conforms",
                "no_conforms",
                "not_applicable"
              ]
            }
    

    然后在您的代码中将数组作为值添加到您的 selectedConformityStatus

          gridApi: undefined,
          selectedSubjects: [],
          selectedGeneralRequirement: "my_responsibility",
          selectedConformityStatus: selectedConformityStatusArray,
    

    【讨论】:

      【解决方案2】:

      在 JavaScript 中,您可以通过在函数定义中定义参数并在调用函数时将条件作为值传递来将条件作为参数传递给函数。

      function myFunction(condition) {
        if (condition) {
          console.log('The condition is true');
        } else {
          console.log('The condition is false');
        }
      }
      
      myFunction(5 > 3); // The condition is true
      myFunction(5 < 3); // The condition is false

      您也可以使用三元运算符来完成此操作。

      function myFunction(condition) {
         return condition ? 'The condition is true' : 'The condition is false';
      }
      console.log(myFunction(5 > 3)); // The condition is true
      console.log(myFunction(5 < 3)); // The condition is false

      您还可以使用箭头功能

      const myFunction = condition => condition ? 'The condition is true' : 'The condition is false';
      console.log(myFunction(5 > 3)); // The condition is true
      console.log(myFunction(5 < 3)); // The condition is false

      【讨论】:

        猜你喜欢
        • 2016-02-16
        • 1970-01-01
        • 1970-01-01
        • 2013-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多