迭代对象JavaScript时,获取for ... of循环中的迭代号

时间:2019-07-31 11:48:00

标签: javascript api ecmascript-7

我从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的值。我想获取迭代号

有什么建议吗?

2 个答案:

答案 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);