for循环在javascript中表现奇怪

时间:2014-04-24 08:01:21

标签: javascript for-in-loop

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服务器上表现得更奇怪

3 个答案:

答案 0 :(得分:1)

friend这是数组的索引,而不是索引的值

var room = 'userid'+friends[friend]+'friends';

另外,当循环遍历数组时,我不建议使用for..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);

答案 1 :(得分:1)

for in结构用于循环对象,for key in objectkey是对象的属性名称,当用于数组时,key将是数组索引。

您可以使用.map来获得结果:

var friends=['2','3'];

var rooms = friends.map(function(e) {
  return 'userid'+e+'friends';
});

答案 2 :(得分:1)

for循环用于枚举对象。您正在尝试迭代数组。迭代的更好技术是常规for循环或Array.forEach()方法。

在for循环中,变量包含键,而不是值。要获取该值,请使用密钥:

for(var i in friends){
    var friend = friends[i];
    ...
}

但是,再一次,这枚举了一个对象,包括除数组元素之外的任何属性。这意味着如果任何代码向Array.prototype添加方法,则该方法也将被枚举。使用.forEach()更好:

friends.forEach(function (friend, i) {
    ...
});

更好的是,由于您尝试根据另一个的内容创建新数组,请使用Array.map()。这正是它的用途。

var rooms = friends.map(function (friend, i) {
    return 'userid'+friend+'friends';
});