【问题标题】:looping a javascript object inside a loop of custom object在自定义对象的循环中循环一个 javascript 对象
【发布时间】:2021-07-25 00:39:11
【问题描述】:

首先,我是 javascript 的初学者。我有这个数据 data.responseJSOn.errors -

目前我正在以这种方式显示错误 -

var errors =  data.responseJSON.errors;
    
console.log(errors);

errors.title && 
errors.title.forEach(function(messageText) {
    displayError(messageText);
    });

errors.message && 
errors.message.forEach(function(messageText) {
    displayError(messageText);
});

如何使用单个代码而不是预定义的errors.title 或errors.message 从那里显示错误。

预期代码如 -

var errors =  data.responseJSON.errors;
var list = ["title", "message"];

list.forEach(function(item) {
    errors.item && 
    errors.item.forEach(function(messageText) {
        displayError(messageText);
    });
});

如何修复它以获得输出。

【问题讨论】:

    标签: javascript jquery json ajax object


    【解决方案1】:

    无论对象data.responseJSON.errors 中的键名如何,您都可以尝试更通用的方法

    var errors =  data.responseJSON.errors;
    var list = ["title", "message"]; // valid keys for which we need to show message
    
    for (key in errors) {
      // check if key is valid and is array
      if(list.includes(key) && Array.isArray(errors[key])) {
        errors[key].map((msg) => {
            displayError(msg);
        })
      } 
    }
    

    【讨论】:

      【解决方案2】:

      如果您需要 [] 语法来访问带有变量值的 errors 对象的字段:

      var errors =  data.responseJSON.errors;
      var list = ["title", "message"];
      
      list.forEach(function(item) {
          errors[item] && 
          errors[item].forEach(function(messageText) {
              displayError(messageText);
          });
      });
      

      【讨论】:

        【解决方案3】:

        您可以使用[] 访问相应的属性:

        var errors =  data.responseJSON.errors;
        var list = ["title", "message"];
        
        list.forEach(function(item) {
            errors[item] && 
            errors[item].forEach(function(messageText) {
                displayError(messageText);
            });
        });
        

        否则(作为更好的选择),您可以使用the for...in loop 语法来访问可枚举的对象属性:

        var errors =  data.responseJSON.errors;
        var list = ["title", "message"];
        
        errors.forEach(function(error) {
            for (property in error) {
                displayError(error[property]);
            }
        });
        

        【讨论】:

          【解决方案4】:

          您不必在此处明确提及错误消息所具有的键的类型。即使在将来,如果messagestitle 发生更改,您也不必再次修改代码。

          const messageText = (message: string) => {
            console.log('message', message)
          }
          
          Object.keys(response).map((error) => response[error].length && response[error].forEach((message: string) =>  messageText(message)));
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-12-12
            • 1970-01-01
            • 2017-01-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多