重构查找函数
Refactoring Lookup Function
我试图重构这个函数,但遇到了麻烦。该函数试图实现的是查找JSON对象中是否存在联系人,如果存在,则确定提供的第二个参数是否是指定对象上存在的属性。
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"]
}
];
function lookUpProfile(firstName, prop){
// Only change code below this line
for (var i = 0; i < contacts.length; i++) {
if (contacts[i].firstName === firstName && contacts[i].hasOwnProperty(prop)) {
return contacts[i][prop];
}
}
for (var j = 0; j < contacts.length; j++) {
if (contacts[j].firstName !== firstName) {
return "No such contact";
} else if (!contacts[j].hasOwnProperty(!prop)) {
return "No such property" ;
}
}
// Only change code above this line
}
// Change these values to test your function
lookUpProfile("kyle", "lastName");
filter
找出所有匹配项,如果找到其他属性,则返回true
false
function lookUpProfile(firstName, prop) {
var list = contacts.filter(function (el) {
return el.firstName === firstName;
});
return list.length && list[0][prop] ? true : false;
}
lookUpProfile("kyle", "lastName"); // false
lookUpProfile("Akira", "lastName"); // true
lookUpProfile("Akira", "password"); // false
演示
不需要像现在这样循环两次函数。快速更改会给你这样的东西:
function lookUpProfile(firstName, prop){
var nameFound = false;
for (var i = 0; i < contacts.length; i++) {
var contact = contacts[i];
// if a correct name is found, store that
if(contact.firstName === firstName){
nameFound = true;
if(contact.hasOwnProperty(prop)) {
return contact[prop];
}
}
}
return nameFound ? "No such property" : "No such contact";
}
基本上,你只需要在找到特定名称的过程中添加一个复选框。如果属性存在,函数将返回对象,但如果它恰好到达末尾(找不到匹配项),则可以知道是否找到了名称。
这假设您只想返回找到的第一个匹配项。
我不确定你想做什么。函数报告这两种情况的唯一方法是让它返回一个带有结果的对象。试试这个。
function lookUpProfile(firstName, prop){
// Only change code below this line
var result ={contactExist: false, secondParameter:false};
for (var i = 0; i < contacts.length; i++) {
if (contacts[i].firstName === firstName) {
result.contactExists=true;
result.secondParameter= contacts[i][prop]!=null;
return result;
}
}
return result;
// Only change code above this line
}
相关文章:
- 正在全局范围中查找JavaScript函数
- 在不使用jquery的情况下查找页面中的所有锚点并附加函数
- 重构查找函数
- 我如何才能执行“;查找“;函数
- 在JScript 5.8/WSH中具有属性查找的函数名
- jQuery函数来查找表行中的哪个按钮被单击
- 类型错误: $(..).查找(..).on 不是一个函数
- 给定一个带有数字的数组,我如何编写一个递归函数,当 2 个元素加起来为一个目标时,它会在数组中查找索引
- 使用 javascript 函数查找元素单击的类
- 让实例化的 javascript 函数查找自己的名称是不好的还是不必要的
- 猫鼬函数 - 查找某物等于某物的计数
- jquery函数查找输入的值是文本或数字和弹出错误
- Javascript:使用.sort和compare函数查找数组中最长的单词
- 使用javascript中的reduce函数查找数组的最小和最大数
- 如何使用firebug函数查找选定的元素xpath
- 使用单个函数查找两个日期之间的差值
- JavasScript函数查找并替换多个项
- 递归函数查找所有子组
- 如何创建 javascript 函数查找对象
- 函数查找文件夹并使用通配符