Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这是解决此JavaScript练习的一种好(有效)方法吗_Javascript_Arrays_Javascript Objects - Fatal编程技术网

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

这是解决此JavaScript练习的一种好(有效)方法吗,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,这是FreeCodeCamp的一个练习,我想知道这个解决方案是否足够好,或者我应该以不同的方式解决它: 练习: 我们的联系人列表中有一组代表不同人员的对象 以firstName和属性(prop)为参数的lookUpProfile函数已经为您预先编写好了 函数应该检查firstName是否是实际联系人的firstName,并且给定的属性(prop)是否是该联系人的属性 如果两者都为true,则返回该属性的“值” 如果firstName与任何联系人不对应,则返回“无此类联系人” 如果prop与任何有

这是FreeCodeCamp的一个练习,我想知道这个解决方案是否足够好,或者我应该以不同的方式解决它:

练习

我们的联系人列表中有一组代表不同人员的对象

以firstName和属性(prop)为参数的lookUpProfile函数已经为您预先编写好了

函数应该检查firstName是否是实际联系人的firstName,并且给定的属性(prop)是否是该联系人的属性

如果两者都为true,则返回该属性的“值”

如果firstName与任何联系人不对应,则返回“无此类联系人”

如果prop与任何有效属性不对应,则返回“No-this property”

解决方案:

//设置
var触点=[
{
“名字”:“Akira”,
“姓氏”:“莱恩”,
“编号”:“0543236543”,
“喜欢”:[“披萨”、“编码”、“布朗尼点数”]
},
{
“名字”:“哈利”,
“姓氏”:“波特”,
“编号”:“0994372684”,
“喜欢”:[“霍格沃茨”、“魔法”、“海格”]
},
{
“名字”:“夏洛克”,
“姓氏”:“福尔摩斯”,
“编号”:“0487345643”,
“喜欢”:[“有趣的案例”,“小提琴”]
},
{
“名字”:“克里斯蒂安”,
“姓氏”:“Vos”,
“编号”:“未知”,
“喜欢”:[“Javascript”、“游戏”、“狐狸”]
}
];
//解决方案
函数lookUpProfile(firstName,prop){
var checkName=“”;
对于(变量i=0;ilookUpProfile(“夏洛克”,“喜欢”)
一个更快的解决方案是对数组使用
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];
学习/了解所有可用的工具和功能可能很困难,但在这种情况下,非常有用

正如在评论中所说,这将更适合于,但我想在此期间我会给你一个答案。

简单的解决方案

const lookup = (firstName, prop) => {
  const person = contacts.find(p => p.firstName === firstName);
  if (!person) {
    return 'No such contact';
  }
  if (!person[prop]) {
    return 'No such property';
  }
  return person[prop];
};


const person = lookup('Kristian', 'likes');

我的解决方案是有效的,但我认为非常复杂,而且浪费资源

一个非常简单的解决方法是:

函数lookUpProfile(firstName,prop){
对于(变量i=0;i返回“无此类联系”
这可能应该转移到这是一个有趣的问题。但是,这个网站不是问这类问题的最佳场所。堆栈溢出是专门针对不起作用的代码的。相反,你应该在Opps上发布这个问题。对不起,我甚至不知道代码审阅网页的存在。你运行过这段代码吗?筛选器返回一个数组,所以!person永远不会发生。您正在查找Aarray.prototyp.find maybe吗?这里有几个错误--筛选器应该检查
联系人。firstName
而不是
person。firstName
。筛选器
返回一个数组,所以以后的测试应该针对
person[0]
(或者更好的方法是检查person数组中的每个项目是否有匹配的
prop
)@pethel谢谢你的提示。我本来打算引用person[0],但忽略了它。
find
是一个更好的选择,所以我编辑了我的代码以反映这一点。我想它将
返回person[prop]
根据OP的要求,我认为您可以直接返回
个人[prop]
,因为您已经检查了
个人
个人[prop]
是否存在!