javascript有没有一种方法可以在没有for循环的情况下循环遍历对象?

javascript有没有一种方法可以在没有for循环的情况下循环遍历对象?,javascript,Javascript,我想出了这个办法,而且似乎奏效了: var errors = []; for (var key in response.data.modelState) { for (var i = 0; i < response.data.modelState[key].length; i++) { errors.push(response.data.modelState[key][i]); } } var erro

我想出了这个办法,而且似乎奏效了:

  var errors = [];
     for (var key in response.data.modelState) {
         for (var i = 0; i < response.data.modelState[key].length; i++) {
             errors.push(response.data.modelState[key][i]);
         }
     }
var errors=[];
for(response.data.modelState中的var键){
对于(var i=0;i
然而,在现代浏览器中,有没有一种方法可以不设置VARI=0的循环?我希望像foreach这样的东西,但这不起作用。

Jquery有一个函数

Javascript还为数组提供了支持,目前绝大多数现代浏览器都支持这一点(IE8和更低版本不支持它)。也存在循环,但应避免这种情况,因为它意味着枚举对象属性,而不是迭代

值得一提的是,.forEach()比使用常规for循环在数组上循环更有效。

Jquery有一个函数

Javascript还为数组提供了支持,目前绝大多数现代浏览器都支持这一点(IE8和更低版本不支持它)。也存在循环,但应避免这种情况,因为它意味着枚举对象属性,而不是迭代

值得一提的是,.forEach()比使用常规for循环在数组上循环要好。

ES5的
。forEach()
是您需要的:

var errors = [];
for (var key in response.data.modelState) {
    response.data.modelState[key].forEach(function (modelStateValue) {
        errors.push(modelStateValue);
    });
}
forEach在IE9+中实现

response.data.modelState[key]
必须是类型为
Array
ES5的
.forEach()
的对象:

var errors = [];
for (var key in response.data.modelState) {
    response.data.modelState[key].forEach(function (modelStateValue) {
        errors.push(modelStateValue);
    });
}
forEach在IE9+中实现


response.data.modelState[key]
必须是类型为
Array

的对象,该代码中有两个循环

  • 您可以使用
    Object.keys
    forEach

  • 您可以使用对
    错误的单个调用来替换内部循环。按

像这样:

var errors = [];
Object.keys(response.data.modelState).forEach(function(key) {
    errors.push.apply(errors, response.data.modelState[key]);
});
循环通过
response.data.modelState
上的“own”可枚举属性名,然后将每个条目的所有值推送到
errors
(使用一种技巧,可以将所有条目从一个数组推送到另一个数组:
.push.apply(目标,源)

在ES6中,您可以对第二部分使用spread运算符:

let errors = [];
Object.keys(response.data.modelState).forEach(key => {
    errors.push(...response.data.modelState[key]);
});

代码中有两个循环

  • 您可以使用
    Object.keys
    forEach

  • 您可以使用对
    错误的单个调用来替换内部循环。按

像这样:

var errors = [];
Object.keys(response.data.modelState).forEach(function(key) {
    errors.push.apply(errors, response.data.modelState[key]);
});
循环通过
response.data.modelState
上的“own”可枚举属性名,然后将每个条目的所有值推送到
errors
(使用一种技巧,可以将所有条目从一个数组推送到另一个数组:
.push.apply(目标,源)

在ES6中,您可以对第二部分使用spread运算符:

let errors = [];
Object.keys(response.data.modelState).forEach(key => {
    errors.push(...response.data.modelState[key]);
});

你试图在另一个循环中循环经典for循环有什么问题?这个问题背后是否有真正的原因,或者仅仅是好奇?它会对你的输入和预期输出有用。你试图在另一个循环中循环。经典的for循环有什么问题?这个问题背后是否有真正的原因,或者仅仅是好奇?输入和预期输出对你来说非常有用,因为这是一个非常好的答案。几分钟后我会接受的。顺便说一下,你提到了ES6。我们什么时候开始在浏览器中看到这一点有什么估计吗?Thanks@Anne:Chrome、Firefox和IE Edge正在积极添加支持。但我认为在接下来的几年里,我们需要为任何在受控环境之外使用的东西进行传输。我使用它。在特定的版本中,它不是所有的ES6,每个浏览器迭代都将支持ES6的一些功能,例如,其余参数已经在FF和Edge中实现:@laruiss:事实上,我应该强调这一点。另一个有用的参考:但为了清楚起见,上面我没有使用rest args,我使用的是spread操作符:非常感谢这个非常好的答案。几分钟后我会接受的。顺便说一下,你提到了ES6。我们什么时候开始在浏览器中看到这一点有什么估计吗?Thanks@Anne:Chrome、Firefox和IE Edge正在积极添加支持。但我认为在接下来的几年里,我们需要为任何在受控环境之外使用的东西进行传输。我使用它。在特定的版本中,它不是所有的ES6,每个浏览器迭代都将支持ES6的一些功能,例如,其余参数已经在FF和Edge中实现:@laruiss:事实上,我应该强调这一点。另一个有用的参考:但为了清楚起见,上面我没有使用rest args,我使用的是spread操作符: