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服务器上表现得更奇怪
答案 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 object
,key
是对象的属性名称,当用于数组时,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';
});