3

有没有办法将“for循环”的结果存储在变量中?

例如,我想在 div 中显示两个名字 kevin 和 elsa。

我知道我可以做 john.friends[0].nom, john.friends[1].nom;

但是如果约翰有很多朋友,那就很难了……

现在变量friendName只给了我名字,我明白为什么但看不到解决方案......

谢谢 !

function Person(name, age, friends) {
    this.name = name;
    this.age = age;
    this.friends = friends;

};

var john = new Person('john', 28, [new Person('elsa', 29, []), new Person('kevin', 31, [])]);

for (var i = 0; i < john.friends.length; i++) {
    var friendName = john.friends[i].name;
}

alert(friendName);
4

4 回答 4

6
var friendNames = []; // store their names within a local array

for(var i = 0; i < john.friends.length; i++){
    friendNames.push(john.friends[i].name);
}

console.log(friendNames); // log to the browser (readability) instead of alert
于 2012-07-12T15:40:48.150 回答
2
var friendNames = []; // create array to hold friend names

for(var i=0; i < john.friends.length; i++){    
    friendNames.push(john.friends[i].name); // add friend's name to the array
}

console.log(friendNames); // an array containing all of John's friends' names.
于 2012-07-12T15:40:39.240 回答
1

由于您的friends变量是一个数组,因此您可以只使用该类型上可用的一些方法

var friendString = john.friends.map(function(f) { return f.name; }).join(' ');

在上面的示例中,map 方法仅将朋友映射到他们的姓名,然后join 方法将生成一个空格分隔的所有 johns 朋友的字符串。

于 2012-07-12T15:40:13.640 回答
1

您可能需要一个名称数组(所有名称的列表)。声明friendName = new Array()friendName.push(john.friends[i].name);

var friendName = new Array();
for (var i = 0; i < john.friends.length; i++) {
    friendName.push(john.friends[i].name);
    //or friendName[i] = john.friends[i].name;
}
//friendName is now an array of names. Use it as you need (the last line is useful for debugging)
for (i = 0; i < friendName.length; i++) alert(friendName[i]);

旧代码的问题是循环的每次迭代都会重新分配friendName。时i = 0,“elsa”被分配给friendName。时i = 1,'kevin' 被重新分配给friendName。

此外,javascript 没有作用域;这就像打电话一样var friendName = 'elsa'; var friendName = 'kevin';。不会破坏 javascript 引擎,但请注意这一点。最好将friendName声明为循环上方的数组,就像我提到的其他人一样。

于 2012-07-12T15:41:45.060 回答