数组无法访问元素?

时间:2016-09-30 08:36:33

标签: javascript arrays node.js alexa-skills-kit

我正在玩亚马逊alexa技能,并试图写我自己的。我有一个技能的一些元素的数组,但我无法访问元素。我相信我已经完成了所有事情并且我已经搜索了一下,但似乎没有任何工作?!

var myArray = [
    { "name" : "matt",    "content" : "this is about matt" },
    { "name" : "james",   "content" : "this is about james" },
];

然后我根据用户输入获得一些代码,该代码使用该名称作为查找器。

var requestedName = "matt";
var contentToRead = myArray.filter(function(v){ return v.name == requestedName; });
console.log("I'll read back, " + contentToRead.content);

上面的console.log以未定义的形式返回。我试图将结果解析为数组,但我尝试的任何东西似乎都没有用。

任何想法?我确信这很简单,但我的知识还不足以真正知道要解决它的具体内容!!

4 个答案:

答案 0 :(得分:3)

.filter过滤数组,删除与过滤器不匹配的值;你得到的东西仍然是一个包含多个对象的数组(因为谓词可能适用于数组中的多个值)。

您想要的行为(返回第一个匹配项)在.find中实现:

var contentToRead = myArray.find(function (v) { return v.name == requestedName; });

答案 1 :(得分:2)

Array.prototype.filter()创建一个新数组,其中包含通过给定函数实现的测试的所有元素,因此contentToRead是一个数组:



var myArray = [
    { "name" : "matt",    "content" : "this is about matt" },
    { "name" : "james",   "content" : "this is about james" },
];

var requestedName = "matt";
var contentToRead = myArray.filter(function(v) { return v.name === requestedName; });
  
// You can loop over contentToRead array
contentToRead.forEach(function(item) {
  console.log("I'll read back, " + item.content);
});




答案 2 :(得分:1)

filter创建一个新的数组,其中包含您传递的函数返回true的元素。

content不是数组的属性,它是该数组中每个对象的属性。

您需要从数组中获取元素才能阅读其内容。

contentToRead.forEach(function (currentValue) {
    console.log("I'll read back, " + currentValue.content);
});

答案 3 :(得分:0)

myArray.filter(function(v){ return v.name == requestedName; });返回的值是一个包含与您的过滤器匹配的对象的数组。 由于您只有一个对象,您可以像以下一样访问它:

contentToRead[0].name
相关问题