如果这是一个愚蠢的问题,请忽略。我刚刚提出了自己的问题解决方案,但我知道这不是一个好的解决方案,并且有更好的智能方法可以做到这一点,如果你有其他只使用javascript的解决方案,请回答。
它要求创建一个循环遍历对象数组的函数,并在firstName与配置文件匹配时返回对象的prop。如果firstName或prop提供给未找到的函数,则返回一些语句。
var contacts = [
{
"firstName": "Sherlock",
"lastName": "Holmes",
"number": "0487345643",
"likes": ["Intruiging Cases", "Violin"]
},
{
"firstName": "Akira",
"lastName": "Laine",
"number": "0543236543",
"likes": ["Pizza", "Coding", "Brownie Points"]
},
{
"firstName": "Harry",
"lastName": "Potter",
"number": "0994372684",
"likes": ["Hogwarts", "Magic", "Hagrid"]
},
{
"firstName": "Kristian",
"lastName": "Vos",
"number": "unknown",
"likes": ["Javascript", "Gaming", "Foxes"]
},
];
function lookUp(firstName, prop){
for (var i = 0; i < contacts.length; i++){
var n = parseInt(contacts.length);
if (contacts[i].firstName === firstName) {
if (contacts[i].hasOwnProperty(prop)){
return contacts[i][prop];
}
else return "No such property";
}
else if (i === (n-1)) {
return "No such contact";
}
}
}
console.log(lookUp("Sherlock", "likes"));
&#13;
答案 0 :(得分:2)
contacts.length
是一个整数,而不是字符串,因此不需要parseInt
。
您实际上并不需要else if
:您可以将它放在循环之外,因为如果联系人存在,您就已经退出了该功能。这也使n
变得不必要,第一点没有用。
一般来说,返回错误消息是个坏主意,除非它们可以清楚地区分为错误消息(参见semipredicate problem);那些应该作为例外抛出,或者至少作为非值null
/ undefined
返回;或者当你要求lookUp('Adolf', 'favouriteSoup')
时,你可能会认为汤被称为"No such contact"
。但是,如果你给出的任务是返回错误信息,我不认为你可以做任何事情。
答案 1 :(得分:0)
您可以使用forEach
将loopUp
方法更改为此方法
function lookUp(firstName, prop)
{
var propValue = "No such contact";
contacts.forEach( function( element ){
if ( element.firstName == firstName )
{
propValue = element[ prop ] ? element[ prop ] : "No such property";
}
} );
return propValue;
}
此外,就像@Amadan提到而不是返回错误消息一样,抛出一个Error,你需要在调用方法中捕获它。
try
{
lookUp();//making call here
}
catch(e)
{
console.error( e );
}
答案 2 :(得分:0)
我建议将两个想要的函数分成两个函数。
lookUp(a, k, v)
getKey(a, k)
function lookUp(a, k, v) {
return a.filter(function (b) {
return b[k] === v;
});
}
function getKey(a, k) {
return a.map(function (b ) {
return k in b? b[k]: 'no property ' + k;
});
}
function print(o) {
document.write('<pre>' + JSON.stringify(o, 0, 4) + '</pre>');
}
var contacts = [{ "firstName": "Sherlock", "lastName": "Holmes", "number": "0487345643", "likes": ["Intruiging Cases", "Violin"] }, { "firstName": "Akira", "lastName": "Laine", "number": "0543236543", "likes": ["Pizza", "Coding", "Brownie Points"] }, { "firstName": "Harry", "lastName": "Potter", "number": "0994372684", "likes": ["Hogwarts", "Magic", "Hagrid"] }, { "firstName": "Kristian", "lastName": "Vos", "number": "unknown", "likes": ["Javascript", "Gaming", "Foxes"] }];
print(lookUp(contacts, 'firstName', 'Sherlock'));
print(getKey(lookUp(contacts, 'firstName', 'Sherlock'), 'likes'));
&#13;