如果所有对象值都被填充,如何遍历对象值并有条件地触发事件?

我的组件中有一个动态生成的对象,如下所示:

currentObjectData: {
   data_type: ""
  }

每次生成新组件时,该对象中都会填充一些其他键/值对,以供日后使用,但是data_type是一个下拉菜单,用户可以选择一些选项。我要实现的是,当有多个所述对象实例并单击一个按钮时,我要遍历所有对象,检查是否为空data_type,如果有,则为用户触发视觉警报。如果没有,我想触发一个事件。我已经尝试过以下解决方案:

  Object.values(this.currentObjectData).forEach(objectData => {
    if (
      !this.objectData.data_type||
      this.objectData.data_type === ""
    ) {
      this.$v.$touch();
    } else {
      EventBus.$emit("allObjectsAreValidated");
    }

或者:

      Object.values((this.currentObjectData).forEach(value => {
        if (!value.includes("")) {
         EventBus.$emit("allObjectsAreValidated");
        }
      });

但是,我设法实现的是如果对象data_type中的一个不为空,则触发该事件。有人可以帮我解决我做错了的事,如何达到预期的效果吗?提前致谢! 附言data_typestring,流程是:触发此method的按钮是父组件,其思想是method是否发出事件,提交表单。

pianyuan 回答:如果所有对象值都被填充,如何遍历对象值并有条件地触发事件?

使用Array.prototype.every

尝试:

const allObjectsMatch = Object.values(this.currentObjectData).every(
    value => /*return a boolean if they value matches*/
);
allObjectsMatch && EventBus.$emit("allObjectsAreValidated");
,

如果您想知道哪些属性不符合条件,可以添加到@ user1538301答复中,可以通过以下方式使用Array::filter

const missingProperties = Object.values(this.currentObjectData)
    .filter(data => objectData.report_type);

if(missingProperties.length > 1) {
    // Do something with the missing properties
} else {
    EventBus.$emit("allObjectsAreValidated");
}

我在代码中也注意到了几件事:

  1. this.objectData:我假设您的意图不是使用对象中的变量,而是使用匿名函数的参数,因此objectData将是正确的变量。

  2. !this.objectData.report_type || this.objectData.report_type === "":空字符串是 falsy 值,因此当被评估为bool时,它等于false。 (更多信息:FreeCodeCamp

本文链接:https://www.f2er.com/3163376.html

大家都在问