【问题标题】:Using forEach on a nested object key react javascript在嵌套对象键上使用 forEach 反应 javascript
【发布时间】:2021-07-24 05:33:03
【问题描述】:

我有一个嵌套对象:

const refsObject = {
  refOne: {
    current: {
      validate: function()
    }
  },
  refTwo: {
    current: {
      validate: function()
    }
  }
};

我需要使用单个方法运行输入字段验证,该方法循环遍历对象的每个嵌套对象并调用验证方法

到目前为止我所尝试的:

const splitObject = o => Object.keys(o).map(e => ({ [e]: o[e] }));
splitObject.forEach(ref => ref.current && ref.current.validate());

SplitObject 返回一个对象数组,其中包含refsObject 中的所有对象。一旦我在 splitObject 上执行 forEach,它就会变得未定义,因为 ref.current 在嵌套对象键“refOne”内,它是动态的,所以我不能硬编码。任何建议都有帮助!

【问题讨论】:

  • 预期结果是什么?
  • forEach 方法不返回任何值,最好是 .map 或 .reduce
  • @OriDrori,我只需要调用包含输入字段参考的每个嵌套对象的当前内部的方法。
  • for (const { current: { validate } } of Object.values(refsObject)) validate();,或者如果你需要this,或者不喜欢解构的方式,for (const v of Object.values(refsObject)) v.current.validate();

标签: javascript arrays reactjs object ecmascript-6


【解决方案1】:

通过获取值并使用Array.forEach() 对其进行迭代,对原始refsObject 运行验证。使用条件链?. 调用函数,以防current 可能是undefined

const refsObject = {refOne:{current:{validate(){console.log('refOne')}}},refTwo: {current: {validate() {console.log('refTwo')}}}};

const runValidations = o => Object.values(o)
  .forEach(ref => ref.current?.validate());

runValidations(refsObject);

【讨论】:

    【解决方案2】:

    这是你要找的吗?

      const refsObject = {
        refOne: {
          current: {
            validate: function() {
              console.log('validate1');
            }
          }
        },
        refTwo: {
          current: {
            validate: function() {
              console.log('validate2');
            }
          }
        }
      };
    
      Object.values(refsObject).map(refs => refs.current.validate());

    【讨论】:

    • 谢谢!这行得通。我只需要添加 refs.current && refs.current.validate()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 2019-05-09
    • 2018-09-19
    • 2022-08-17
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    相关资源
    最近更新 更多