我从API调用中获取了以下对象:
{
"email": ["The email has already been taken."],
"profile_image": [ "profile image is requried." ]
}
我使用以下代码遍历此对象(用于... of):
let message = "";
for (const [error_name, error_value, i] of Object.entries(
error.response.data.errors
)) {
message += `${i}: ${error_value[0]}\n`;
}
但是我得到undefined
而不是得到i
的值。我想获取迭代号。
有什么建议吗?
答案 0 :(得分:4)
JOIN
项目将仅包含两个值:键和值。如果还需要索引,则必须自己实现或使用其他策略。一种选择是使用Object.entries
遍历数组(第二个参数forEach
是当前索引):
forEach
您还可以使用let message = "";
Object.entries(error.response.data.errors)
.forEach(([error_name, error_value], i) => {
message += `${i}: ${error_value[0]}\n`;
});
/ let
来避免message
的{{1}}:
.map
(与您的原始代码不同,它的末尾没有换行符,但这可能是一件好事)
答案 1 :(得分:0)
Object.entries
中的迭代器仅生成[key, value]
形式的两位数组。这些数组中没有第三项。
通常,应将对象视为无序的,因此尚不清楚为什么要使用索引。但是,如果这样做,由于要使用连接构建字符串,则可以在map
数组上使用Object.entries
来代替:
let message =
Object.entries(error.response.data.errors)
.map(([error_name, error_value], i) => `${i}: ${error_value[0]}\n`)
.join("");
实时示例:
const error = {
response: {
data: {
errors: {
"email": ["The email has already been taken."],
"profile_image": [ "profile image is requried." ]
}
}
}
};
let message =
Object.entries(error.response.data.errors)
.map(([error_name, error_value], i) => `${i}: ${error_value[0]}\n`)
.join("");
console.log(message);