[英]for in loop behaving strangely in javascript
var friends=['2','3'];
console.log(friends);
var rooms=[];
for(var friend in friends){
var room = 'userid'+friend+'friends';
console.log(room);
rooms.push(room);
}
console.log(rooms);
这个输出
[ '2', '3' ]
userid0friends
userid1friends
[ 'userid0friends', 'userid1friends' ]
3被完全忽略了,它在我的node.js服务器上的表现甚至更奇怪
这里的friend
是数组的索引,而不是索引的值
var room = 'userid'+friends[friend]+'friends';
另外,当我不建议在数组中循环使用..in循环时,可以使用Array.prototype.map
或plain for循环来使用数组的长度
var friends=['2','3'];
console.log(friends);
var rooms= friends.map(function (friend, index) {
return 'userid' + friend + 'friends';
});
console.log(rooms);
var friends=['2','3'];
console.log(friends);
var rooms=[];
for (var i = 0, l = friends.length; i < l; ++i) {
var room = 'userid' + friends[i] + 'friends';
console.log(room);
rooms.push(room);
}
console.log(rooms);
for in
结构用于循环对象, for key in object
, key
是for key in object
的属性名,当用于数组时, key
将是数组索引。
您可以使用.map
获得结果:
var friends=['2','3'];
var rooms = friends.map(function(e) {
return 'userid'+e+'friends';
});
for in循环用于枚举对象。 您正在尝试遍历数组。 更好的迭代技术是常规的for循环或Array.forEach()
方法。
在for in循环中,变量包含键,而不是值。 要获取值,请使用键:
for(var i in friends){
var friend = friends[i];
...
}
但是,这再次枚举了一个对象,包括除数组元素之外的所有属性。 这意味着,如果任何代码向Array.prototype
添加了一个方法,则该方法也将被枚举。 使用.forEach()
更好:
friends.forEach(function (friend, i) {
...
});
更好的是,由于您尝试基于另一个对象的内容创建一个新的Array,请使用Array.map()
。 那正是它的目的。
var rooms = friends.map(function (friend, i) {
return 'userid'+friend+'friends';
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.