在自定义对象的循环中循环一个 javascript 对象

Posted

技术标签:

【中文标题】在自定义对象的循环中循环一个 javascript 对象【英文标题】:looping a javascript object inside a loop of custom object 【发布时间】: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);
    );
);

如何修复它以获得输出。

【问题讨论】:

【参考方案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)));

【讨论】:

以上是关于在自定义对象的循环中循环一个 javascript 对象的主要内容,如果未能解决你的问题,请参考以下文章

在自定义帖子循环中显示自定义类别

在自定义 foreach 循环中按字母顺序对结果进行排序

在自定义 WebAPi 中调用 Azure Speech API 时进入无限循环

在自定义验证器指令中注入 ngControl,导致循环依赖

如何在自定义 PyYAML 构造函数中处理递归?

JavaScript 循环