在遍历对象时获取 for...of 循环中的迭代次数 JavaScript
Get iteration number in for...of loop while iterating over an object JavaScript
我从 API 调用中得到以下对象:
{
"email": ["The email has already been taken."],
"profile_image": [ "profile image is requried." ]
}
我使用以下代码迭代此对象(使用 for...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
的值。我想得到迭代次数.
有什么建议吗?
一个Object.entries
项将只包含两个值:键和值。如果您也想要索引,则必须自己实施或使用其他策略。一种选择是使用 forEach
来遍历数组(第二个参数 forEach
采用的是当前索引):
let message = "";
Object.entries(error.response.data.errors)
.forEach(([error_name, error_value], i) => {
message += `${i}: ${error_value[0]}\n`;
});
您还可以通过使用 .map
/.join
:
来避免 message
的 let
const message = Object.entries(error.response.data.errors)
.map(([error_name, error_value], i) => `${i}: ${error_value[0]}`)
.join('\n');
(与您的原始代码不同,末尾没有尾随换行符,但这可能是件好事)
来自 Object.entries
的迭代器仅生成 [key, value]
形式的两位数组。这些数组中没有第三个条目。
一般来说,对象应该被认为是无序的,所以不清楚为什么需要索引。但是如果你这样做了,因为你正在构建一个带有连接的字符串,你可以在 Object.entries
数组上使用 map
代替:
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);
我从 API 调用中得到以下对象:
{
"email": ["The email has already been taken."],
"profile_image": [ "profile image is requried." ]
}
我使用以下代码迭代此对象(使用 for...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
的值。我想得到迭代次数.
有什么建议吗?
一个Object.entries
项将只包含两个值:键和值。如果您也想要索引,则必须自己实施或使用其他策略。一种选择是使用 forEach
来遍历数组(第二个参数 forEach
采用的是当前索引):
let message = "";
Object.entries(error.response.data.errors)
.forEach(([error_name, error_value], i) => {
message += `${i}: ${error_value[0]}\n`;
});
您还可以通过使用 .map
/.join
:
message
的 let
const message = Object.entries(error.response.data.errors)
.map(([error_name, error_value], i) => `${i}: ${error_value[0]}`)
.join('\n');
(与您的原始代码不同,末尾没有尾随换行符,但这可能是件好事)
来自 Object.entries
的迭代器仅生成 [key, value]
形式的两位数组。这些数组中没有第三个条目。
一般来说,对象应该被认为是无序的,所以不清楚为什么需要索引。但是如果你这样做了,因为你正在构建一个带有连接的字符串,你可以在 Object.entries
数组上使用 map
代替:
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);