JavaScript,在JSON中连接数组值属性值

时间:2015-05-21 17:06:14

标签: javascript json

当我调用ajax POST请求时,我会返回一个带有任何验证错误的JSON数组。以下是回复的示例:

{
    password: [
        "The password confirmation does not match"
    ], 
    username: [
        "A username is required", 
        "Your username must be at least 5 characters long."
    ]
}

如何将其缩小以获取错误消息的数组?我的最终目标是将每条消息推送到div中。我可以做的是遍历密码中的每个消息,然后是用户名,然后是电子邮件等...但我想看看是否有其他方法或更好的方法来做到这一点。

3 个答案:

答案 0 :(得分:0)

您应该使用Object.keys遍历响应中的所有键("密码"以及"用户名"在您的示例中)并将其内容合并为单个输出阵列。类似的东西:



var data = {
  password: [
    "The password confirmation does not match"
  ],
  username: [
    "A username is required",
    "Your username must be at least 5 characters long."
  ]
};

var joined = Object.keys(data).reduce(function(dest, key) {
  return dest.concat(data[key]);
}, []);

document.getElementById('r').textContent = JSON.stringify(joined);

<pre id=r></pre>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

尝试发送一组错误消息。迭代数组并将它们放入div中。

{
    errorMsgs: [
        "The password confirmation does not match",
         "A username is required", 
        "Your username must be at least 5 characters long."
    ]
}

答案 2 :(得分:0)

[].concat.apply([], Object.keys(json) . map(function(key) { return json[key]; }));

这是如何运作的:

concat获取参数列表并将它们连接起来。我们需要安排将数组传递给它,这些属性是password等属性的值。为此,我们使用apply允许我们将它期望的所有参数作为数组传递。要创建此数组,我们将对象的键映射到它们的值。

在ES6中,您可以更简单地将其写为

[].concat(...Object.keys(json) . map(key => json[key]));