簡體   English   中英

在JavaScript中表現異常的循環

[英]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);

普通for循環:

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 objectkeyfor 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM