使用Vanilla JavaScript搜索对象数组

使用Vanilla JavaScript搜索对象数组,javascript,arrays,Javascript,Arrays,我学习编程已经9周了,我正试图进入黑客反应堆。目前,我正在建设一个网站,希望你能帮助我(几天的测试和梳理互联网——我以前的绕过障碍的策略——已经证明是徒劳的),我遇到了一堵墙 总之,我有一个对象数组,每个对象都是一个包含五个属性的教学策略。我的目标是添加一个搜索函数,在每个对象上迭代搜索关键字,以便教师可以搜索策略数组。目前,我使用.map方法在每个对象上迭代一个函数,检查关键字的“tags”属性,但由于某种原因,我无法让函数访问“tags” 我已经创建了一个JSFIDLE供您签出: var m

我学习编程已经9周了,我正试图进入黑客反应堆。目前,我正在建设一个网站,希望你能帮助我(几天的测试和梳理互联网——我以前的绕过障碍的策略——已经证明是徒劳的),我遇到了一堵墙

总之,我有一个对象数组,每个对象都是一个包含五个属性的教学策略。我的目标是添加一个搜索函数,在每个对象上迭代搜索关键字,以便教师可以搜索策略数组。目前,我使用.map方法在每个对象上迭代一个函数,检查关键字的“tags”属性,但由于某种原因,我无法让函数访问“tags”

我已经创建了一个JSFIDLE供您签出:

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";}
});