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操作符: