使用Vanilla JavaScript搜索对象数组
我学习编程已经9周了,我正试图进入黑客反应堆。目前,我正在建设一个网站,希望你能帮助我(几天的测试和梳理互联网——我以前的绕过障碍的策略——已经证明是徒劳的),我遇到了一堵墙 总之,我有一个对象数组,每个对象都是一个包含五个属性的教学策略。我的目标是添加一个搜索函数,在每个对象上迭代搜索关键字,以便教师可以搜索策略数组。目前,我使用.map方法在每个对象上迭代一个函数,检查关键字的“tags”属性,但由于某种原因,我无法让函数访问“tags” 我已经创建了一个JSFIDLE供您签出:使用Vanilla JavaScript搜索对象数组,javascript,arrays,Javascript,Arrays,我学习编程已经9周了,我正试图进入黑客反应堆。目前,我正在建设一个网站,希望你能帮助我(几天的测试和梳理互联网——我以前的绕过障碍的策略——已经证明是徒劳的),我遇到了一堵墙 总之,我有一个对象数组,每个对象都是一个包含五个属性的教学策略。我的目标是添加一个搜索函数,在每个对象上迭代搜索关键字,以便教师可以搜索策略数组。目前,我使用.map方法在每个对象上迭代一个函数,检查关键字的“tags”属性,但由于某种原因,我无法让函数访问“tags” 我已经创建了一个JSFIDLE供您签出: var m
var myIdeas=[
{名称:“合唱”,
图片:“img/xideas/choral.jpg”,
年级:[1,9,9],
理论:“理论:”+“
”+“马上就来。”,
标签:[“CFU”,“读写”]},
{名称:“荧光灯”,
图片:“img/xideas/highlighters.jpg”,
职系:[2,2,3],
理论:“理论:”+“
”+“马上就来。”,
标记:[“操纵”、“微分”]},
];
var input=“识字”
var输出=myIdeas.map(函数(输入){
如果(输入=“标记”){
输出+=“名称”;
}否则{
返回“没有匹配项,请重试”;}
});
最后一件事-Hack Reactor要求我的项目只使用普通的JavaScript(没有框架,从我所读的内容来看,这会使这项任务更容易)。除非你知道为什么要这样做,否则在这种情况下你不应该
map()
'ing,你应该filter()
'ing。您现在编写这篇文章的方式没有充分利用map()
——您最好使用forEach()
。您从回调返回的内容没有意义,也无法以合理的方式访问以检测并向用户报告(尽管您可以使用output
的值来检测相同的情况)
阅读有关map()
、filter()
和forEach()
的内容,并思考它们如何应用于这种情况以及您需要什么样的输出
在每次调用回调时,input
都是对象,因此如果您想访问标记,它应该是input.tags
。如果您想访问外部输入(您的搜索词),您需要以不同的方式命名其中一个
var input=“读写”;
//此处的'input'声明将设置为当前值的变量名
//在每次回调调用期间数组的元素。
var输出=myIdeas.map(函数(输入){
//`input`现在引用此函数的参数。您已将
//外部变量的名称相同,无法再访问它。
//'input'现在是数组中的一个对象。如果要访问类似于
//'tags',它是'input.tags';
如果(输入=“标记”){
输出+=“名称”;
}否则{
返回“没有匹配项,请重试”;}
});
除非你知道为什么要这样做,否则在这种情况下你不应该map()
'ing,你应该filter()
'ing。您现在编写这篇文章的方式没有充分利用map()
——您最好使用forEach()
。您从回调返回的内容没有意义,也无法以合理的方式访问以检测并向用户报告(尽管您可以使用output
的值来检测相同的情况)
阅读有关map()
、filter()
和forEach()
的内容,并思考它们如何应用于这种情况以及您需要什么样的输出
在每次调用回调时,input
都是对象,因此如果您想访问标记,它应该是input.tags
。如果您想访问外部输入(您的搜索词),您需要以不同的方式命名其中一个
var input=“读写”;
//此处的'input'声明将设置为当前值的变量名
//在每次回调调用期间数组的元素。
var输出=myIdeas.map(函数(输入){
//`input`现在引用此函数的参数。您已将
//外部变量的名称相同,无法再访问它。
//'input'现在是数组中的一个对象。如果要访问类似于
//'tags',它是'input.tags';
如果(输入=“标记”){
输出+=“名称”;
}否则{
返回“没有匹配项,请重试”;}
});
此代码需要在哪里运行?输入的是您试图匹配的标记吗?只需放置一个console.log来查看输入的实际内容。然后在文档中查找map
。调试是一项关键技能(步骤1)。阅读文档太难了(步骤2)。总是检查你的假设。@BenjaminGruenbaum-谢谢你的快速回复!我很惊讶。代码需要在我的网站上运行。下面是GitHub上的完整项目:如果你按照我说的做,你会在几分钟内自己得到答案。这段代码需要在哪里运行?是input
你试图匹配的标记吗?只需放置一个console.log来查看input
实际上是什么。然后在文档中查找map
。调试是一项关键技能(步骤1)。阅读文档太难了(步骤2)。总是检查你的假设。@BenjaminGruenbaum-谢谢你的快速回复!我很惊讶。代码需要在我的网站上运行。下面是GitHub上的完整项目:如果你照我说的做,你自己会在几分钟内得到答案。或者至少是map
ping正确<代码>筛选
需要额外的步骤。我可能错了,但我认为结果值“无匹配项,请重试”旨在作为全局结果值,而不是数组中的条目。因此,就我看来,filter
似乎是正确的选择。filter使元素与
var myIdeas = [
{name: "Choral",
image: "img/xideas/choral.jpg",
grade: [1, 9, 9],
theory: "Theory:" + "<br>" + "Coming Soon.",
tags: ["CFU", "literacy"]},
{name: "Highlighters",
image: "img/xideas/highlighters.jpg",
grade: [2, 2, 3],
theory: "Theory:" + "<br>" + "Coming Soon.",
tags: ["manipulative", "differentiation"]},
];
var input = "literacy"
var output = myIdeas.map(function(input) {
if (input == "tags") {
output += "name";
} else {
return "no matches, please try again";}
});