我正在玩亚马逊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以未定义的形式返回。我试图将结果解析为数组,但我尝试的任何东西似乎都没有用。
任何想法?我确信这很简单,但我的知识还不足以真正知道要解决它的具体内容!!
答案 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