这是来自FreeCodeCamp的练习,我想知道这个解决方案是否足够好,或者我应该以不同的方式解决它:
EXERCISE :
我们的联系人列表中有一组代表不同人的对象。
为您编写了一个以firstName和一个属性(prop)作为参数的lookUpProfile函数。
该函数应检查firstName是否为实际联系人的firstName,并且给定属性(prop)是该联系人的属性。
如果两者都为真,则返回"值"该财产。
如果firstName与任何联系人不对应,则返回"没有此类联系人"
如果道具与任何有效的属性不对应,则返回"没有这样的属性"
SOLUTION:
//Setup
var contacts = [
{
"firstName": "Akira",
"lastName": "Laine",
"number": "0543236543",
"likes": ["Pizza", "Coding", "Brownie Points"]
},
{
"firstName": "Harry",
"lastName": "Potter",
"number": "0994372684",
"likes": ["Hogwarts", "Magic", "Hagrid"]
},
{
"firstName": "Sherlock",
"lastName": "Holmes",
"number": "0487345643",
"likes": ["Intriguing Cases", "Violin"]
},
{
"firstName": "Kristian",
"lastName": "Vos",
"number": "unknown",
"likes": ["Javascript", "Gaming", "Foxes"]
}
];
// SOLUTION
function lookUpProfile(firstName, prop) {
var checkName = "";
for (var i = 0; i < contacts.length; i++) {
if (contacts[i].firstName === firstName) {
checkName = contacts[i].firstName;
break;
} else {
checkName = "No such contact";
}
}
var checkProp = "";
for (var j = 0; j < contacts.length; j++) {
if ((contacts[j].hasOwnProperty(prop)) === true && checkName != "No such contact") {
checkProp = contacts[i][(prop)];
break;
} else {
checkProp = "No such property";
}
}
switch (checkName) {
case "No such contact":
console.log (checkName); // I have put there return instead of console.log.
default:
console.log (checkProp); // I have put there return instead of console.log.
}
// Only change code above this line
}
// Change these values to test your function
lookUpProfile("Sherlock", "likes");
&#13;
另一个重要问题: 我花了大约2.5小时才解决这个问题(我是初学者,每次学习循环,我都会挣扎)。
这是正常还是我之前应该找到解决方案?
谢谢!!学习编程非常困难,但是很有意义!!
答案 0 :(得分:0)
简单的解决方案;
object MyObject {
def main(args: Array[String]): Unit = {
val a = Array(1,2,3)
// val a: Seq[Int] = Array(1,2,3) if added explicitly works
val result = a match {
case Seq(
first,
second,
third
) => (first, second, third)
}
println(result)
}
}
答案 1 :(得分:0)
我的解决方案是有效的,但我认为非常复杂,浪费资源。
解决问题的一个非常简单的方法是:
function lookUpProfile(firstName, prop) {
for (var i = 0; i < contacts.length; i++) {
if (contacts[i].firstName === firstName) {
if (contacts[i].hasOwnProperty(prop)) {
return contacts[i][prop];
} else {
return "No such property";
}
}
}
return "No such contact";
答案 2 :(得分:-1)
更快的解决方案是使用数组的find
函数。类似的东西:
var person = contacts.find(function(contact) {
return contact.firstName === firstName;
});
if (!person) {
return 'No such contact';
}
if (!person[prop]) {
return 'No such property';
}
return person[prop];
可能很难学习/了解所有可用的工具和功能,但在这种情况下,find function非常有用。
正如评论中所述,这对code review stack exchange更合适,但我想我会在此期间给你一个答案。