数组无法访问元素?
我正在玩亚马逊的alexa技巧,并试图写我自己的。 我有一个技能的一些元素的数组,但我不能访问的元素。 我相信我已经做了一切正确的事情,而且我已经使用了一点点,但似乎没有任何工作?
var myArray = [ { "name" : "matt", "content" : "this is about matt" }, { "name" : "james", "content" : "this is about james" }, ];
然后我有一些基于用户input的代码,使用名称作为查找器。
var requestedName = "matt"; var contentToRead = myArray.filter(function(v){ return v.name == requestedName; }); console.log("I'll read back, " + contentToRead.content);
上面的console.log是未定义的。 我试图parsing结果到一个数组,但我没有尝试似乎工作。
有任何想法吗? 我相信这是简单的,但我的知识是不够的,实际上知道什么专门寻找解决它!
.filter
过滤数组,它将删除与filter不匹配的值 ; 你会得到的还是一个包含多个对象的数组(因为谓词可能适用于数组中的多个值)。
你想要的行为,返回第一个匹配,在.find
实现:
var contentToRead = myArray.find(function (v) { return v.name == requestedName; });
Array.prototype.filter()创build一个新的数组,其中包含所有通过给定函数实现的testing的元素,所以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); });
filter
创build一个新的数组,其中包含传递它的函数返回true的元素。
content
不是数组的属性,它是该数组内的每个对象的属性。
您需要从数组中获取元素来读取其内容。
contentToRead.forEach(function (currentValue) { console.log("I'll read back, " + currentValue.content); });
myArray.filter(function(v){ return v.name == requestedName; });
是一个包含与您的filter匹配的对象的数组。 因为你只有一个对象,你可以像这样访问它:
contentToRead[0].name