这是解决此JavaScript练习的好(有效)方法吗?

时间:2017-07-26 20:11:59

标签: javascript arrays javascript-objects

这是来自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;
&#13;
&#13;

另一个重要问题: 我花了大约2.5小时才解决这个问题(我是初学者,每次学习循环,我都会挣扎)。

这是正常还是我之前应该找到解决方案?

谢谢!!学习编程非常困难,但是很有意义!!

3 个答案:

答案 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更合适,但我想我会在此期间给你一个答案。