我想创建一个可以接受任何两个人对象的Javascript函数,如果它们完全相同(例如,如果firstName,lastName和email值都匹配)则返回true,如果它们不相同则返回false。这是我到目前为止所得到的,但我还没有任何逻辑,因为我不确定是否会使用if else语句或其他内容。
<!DOCTYPE html>
<html>
<head>
<title>Question 6</title>
<script type="text/javascript" src="js/libs/jquery/jquery.js"></script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script>
var person1 = {
firstName: "Mike",
lastName: "Smith",
email: "msmith@yahoo.com"
};
var person2 = {
firstName: "John",
lastName: "Smith",
email: "jsmith@yahoo.com"
};
$(document).ready (function comparePersons(person1, person2) {
if (person1.firstName !== person2.firstName)
return false;
if (person1.lastName !== person2.lastName)
return false;
if (person1.email !== person2.email)
return false;
else
return true;
});
$("#output").html(value);
if (return true)
string "True";
else (return false)
string "False";
</script>
</head>
<body>
<div id="output">
</div>
</body>
</html>
答案 0 :(得分:3)
编辑:以较短的方式(特别是如果你想比较更多东西),我们只需设置一个我们想要比较的所有属性的数组,然后循环它们:
function areTheyTheSame(p1, p2) {
var criterias = ['email', 'firstName', 'lastName'];
for (var i=0; i<criterias.length; i++) {
if (p1[criterias[i]] !== p2[criterias[i]])
return false;
}
return true;
}
console.log(areTheyTheSame(person1, person2));
第一个答案: 我想说最好的方法就是:
function areTheyTheSame(p1, p2) {
if (p1.email !== p2.email)
return false;
if (p1.firstName !== p2.firstName)
return false;
if (p1.lastName !== p2.lastName)
return false;
return true;
}
console.log(areTheyTheSame(person1, person2));
目的是在功能早期返回。一旦我们知道他们不是同一个人(并且电子邮件可能是最简单的知道方式),我们就可以从该功能返回。
答案 1 :(得分:0)
你在几个地方有拼写错误 - 应该是“人”而不是“peson”
如果你向函数传递2个“人”参数,你不应该在函数中创建新的本地“人”变量 - 因为它们具有相同的名称,它们将覆盖/冲突传入的内容。在您当前的代码中,您没有比较传入的两件事,您只是将person2
与您在函数内定义的本地版person1
进行比较。
您还有2个return
语句。第一个导致函数停止在原来的位置,因此您尝试显示到#output
的行甚至不会被击中。
您不能将return
放在html()
函数中。它需要是HTML或字符串。
原来的问题: 在JavaScript中,您可以使用点表示法或括号访问对象属性。 您还可以使用“===”直接比较字符串(与某些语言不同)。这应该适用于您的情况,因为您比较的所有内容似乎都是字符串。
因此,如果您想比较firstName,lastName和email,一个选项是将这3个条件合并到一个if
语句中......
if (person1.email === person2.email && person1.lastName === person2.lastName && person1.firstName === person2.firstName) {
//Success!
}
else {
//Fail!
}
这将失败并在任何一个条件首先失败时返回,所以如果你以降低的匹配机会命令它们,你会很快发现是否有匹配。但是,这是一个相当长的&amp;复杂的条件陈述。打破它们会更清洁,更易于管理。
或者,特别是如果你想在未来添加或比较更多属性...请参阅Cohars回答我将要编写的其他方法,但现在不需要:)