在此示例中,为什么在循环遍历数组时需要数组名称?

时间:2014-05-10 21:55:04

标签: javascript

所以,我理解这个例子中的一切,但有一点。 在搜索功能中我为什么需要编写

if (friends[key].firstName === name)

而不是

if (key.firstName === name)

我相信当对象被逐一抓取时,写“朋友[关键] .firstName”似乎是多余的。

循环是否只有一个对象,只是将它与name参数进行比较?


var friends = {};
friends.bill =  {
    firstName: "Bill",
    lastName: "Gates",
    number: "(206) 555-5555",
    address: ['One Microsoft Way','Redmond','WA','98052']
};
friends.steve = {
    firstName: "Steve",
    lastName: "Ballmer",
    number: "(206) 444-5555",
    address: ['One Microsoft Way','Redmond','WA','98052']
};

var list = function(friends) {
    for (var key in friends) {
        console.log(key);
    }
};

var search = function(name) {
    for (var key in friends) {
        if (friends[key].firstName === name) {
            console.log(friends[key]);
            return friends[key];
        }
    }
 };

search("Steve");

3 个答案:

答案 0 :(得分:1)

因为使用for ... in循环,第一个变量(在这种情况下为key)表示属性的名称,而不是值本身。对于来自语言的人来说,这是一个非常常见的误解...每个循环(通常语法上非常相似,但服务于完全不同的目的,因为它们用于迭代集合,不像for ... in循环,这是用于迭代对象的属性),其中变量直接表示当前迭代中的拉取值。

答案 1 :(得分:1)

在JavaScript中,其他语言中没有foreach for (... in ...)构造用于迭代对象中的键,而不是数组中的值。
如果您在数组上使用for (... in ...),那么"键"将数组索引作为字符串(例如"0""1"等...),这就是为什么你可以在技术上将它用于数组,但它绝对不是推荐的方式。

迭代数组的最常用方法是使用array.forEach(function(value, i) { ... }),它只是一个辅助方法(和ES5的一部分)。

答案 2 :(得分:0)

for (var key in friends) {

friends是您的对象,您正在循环保存var key中对象键的对象。所以密钥只保存您当前正在循环的密钥:stevebill。要访问该对象,请使用object [key],因此friends[key]是正确的用法

如果您不喜欢这样,可以尝试使用:

var keys=Object.keys(friends);
for(var i=0;i<keys.length;i++){
    var friend=friends[keys[i]];
    console.log(friend.firstName);
}