我的JavaScript代码中的错误在哪里?
var friends = {
bill: {
firstName: 'Bill',
lastName: 'Gates',
number: 23123,
address: ['One Microsoft Way', 'Redmond', 'WA', '98052']
},
steve: {
firstName: 'Steve',
lastName: 'Trueman',
number: 123123,
address: ['One Microsoft Way', 'Redmond', 'WA', '98052']
}
};
/*
var list = function(friends) {
for (var firstName in friends) {
console.log(firstName)
// Use object[key] to access
// the corresponding value
}
}
*/
var search = function() {
for (var firstName in friends) {
if (firstName === 'Steve') {
console.log(friends[steve]);
return friends[steve];
} else {
console.log("not cool")
};
}
};
答案 0 :(得分:1)
首先,search()
函数需要在某处执行...
search();
这是我要改变的......
var search = function () {
for (var f in friends) {
if (friends[f].firstName === 'Steve') {
console.log(friends[f]);
return friends[f];
} else {
console.log("not cool")
};
}
};
...注意f in frients
,这就像数组上的索引一样,允许(稍后)friends[f]
和friends[f].firstname
作为正确的引用。
答案 1 :(得分:1)
函数中的循环并没有按照你的想法进行。
使用for(var firstName in friends)
并不意味着您从firstName
中的每个对象获得friends
属性。您将获得friends
中每个对象的密钥,该密钥将放在名为firstName
的变量中。
使用当前数据,变量将在第一次迭代中获得值"bill"
,然后在第二次迭代中获得"steve"
。
此外,没有找到任何东西所采取的行动(记录"不冷静")为时过早。当你在循环中这样做时,你会得到每个人中的一个,直到你找到匹配。确定在循环之后没有找到任何内容,即当已经检查了对象中的所有项目时。
该函数的一个更有用的版本是:
function search(name) {
for (var key in friends) {
var friend = friends[key];
if (friend.firstName === name) {
return friend;
};
}
return null;
};
用法:
var f = search('Steve');
if (f != null) {
// found steve
} else {
// not found
}