Javascript array.filter提供未定义的值
我有一个json文件,其结构如下:Javascript array.filter提供未定义的值,javascript,json,asynchronous,filter,fetch,Javascript,Json,Asynchronous,Filter,Fetch,我有一个json文件,其结构如下: {"year" : 1990, "fact": "Er waren oorspronkelijk maar drie seizoenen van de serie voorzien"} 在我的网站上,我有一部电影的片段。它们都有发布日期。如果发布日期与JSON文件中的特定年份匹配,我想显示一个属于该年份的事实。我尝试使用以下代码实现这一点: const showFact = async () => { const year = docu
{"year" : 1990, "fact": "Er waren oorspronkelijk maar drie seizoenen van de serie voorzien"}
在我的网站上,我有一部电影的片段。它们都有发布日期。如果发布日期与JSON文件中的特定年份匹配,我想显示一个属于该年份的事实。我尝试使用以下代码实现这一点:
const showFact = async () => {
const year = document.querySelector(`.date`).textContent.split(` `)[2];
const response = await fetch(`./assets/data/nice-to-know.json`);
const facts = response.json();
const fact = facts.filter(fact => fact.year == year).fact;
document.querySelector(`.fact`).textContent = fact;
}
如果我
console.log(fact)
,我会看到事实是未定义的
Array.prototype.filter
仍然返回一个数组,您要查找的是Array.prototype.find
const事实=[
{“年份”:1990年,“事实”:“1990年事实”},
{“年份”:1991年,“事实”:“1991年事实”},
{“年份”:1992年,“事实”:“1992年事实”},
{“年份”:1993年,“事实”:“1993年事实”}
]
const fact=facts.find(fact=>fact.year==1990);
console.log(事实)
Array.prototype.filter
仍然返回一个数组,您要查找的是Array.prototype.find
const事实=[
{“年份”:1990年,“事实”:“1990年事实”},
{“年份”:1991年,“事实”:“1991年事实”},
{“年份”:1992年,“事实”:“1992年事实”},
{“年份”:1993年,“事实”:“1993年事实”}
]
const fact=facts.find(fact=>fact.year==1990);
console.log(事实)代码>
array.filter返回一个数组。我只需要选择该数组的第一项
array.filter返回一个数组。我只需要选择该数组的第一项 正如我在评论中所说,你的问题在于
const fact = facts.filter(fact => fact.year == year).fact;
因为filter
返回一个数组,当然,它没有fact
属性
假设filter
返回一个非空的单元素数组,您的意思可能是
const fact = facts.filter(fact => fact.year == year)[0].fact;
正如我在评论中所说,你的问题在于
const fact = facts.filter(fact => fact.year == year).fact;
因为filter
返回一个数组,当然,它没有fact
属性
假设filter
返回一个非空的单元素数组,您的意思可能是
const fact = facts.filter(fact => fact.year == year)[0].fact;
正如注释中指出的,您正在尝试访问数组上的属性。当你过滤facts
它成为一个数组时,你需要映射它
const showFact=async()=>{
const year=document.querySelector(`.date`).textContent.split(`)[2];
const response=wait fetch(`./assets/data/nice to know.json`);
const facts=response.json();
const factList=facts.filter(fact=>fact.year==year.map(fact=>fact.fact);
document.querySelector(`.fact`)。textContent=factList.join(“
”);
}
上面我使用map
函数将事实提取到一个只包含事实的数组(不含年份),然后用换行符连接。如注释所述,您正在尝试访问数组上的属性。当你过滤facts
它成为一个数组时,你需要映射它
const showFact=async()=>{
const year=document.querySelector(`.date`).textContent.split(`)[2];
const response=wait fetch(`./assets/data/nice to know.json`);
const facts=response.json();
const factList=facts.filter(fact=>fact.year==year.map(fact=>fact.fact);
document.querySelector(`.fact`)。textContent=factList.join(“
”);
}
上面我使用map
函数将事实提取到一个只包含事实的数组中(不含年份),然后用换行符连接。facts.filter(fact=>fact.year==year)。fact
那么您有一个带有fact
属性的数组了吗?也许你的意思是facts.filter(fact=>fact.year==year)[0]。fact
?filter仍然返回一个数组,你要查找的是。find
@FedericoklezCulloca yes!请参阅JSON文件以了解结构。@Foxonfirhd我编辑了我的评论,也许现在已经清楚了。@FedericoklezCulloca是的,我错过了,现在它可以工作了facts.filter(fact=>fact.year==year)。fact
那么您有一个带有fact
属性的数组?也许你的意思是facts.filter(fact=>fact.year==year)[0]。fact
?filter仍然返回一个数组,你要查找的是。find
@FedericoklezCulloca yes!请参阅JSON文件以了解结构。@Foxonfirhd我编辑了我的评论,也许现在已经清楚了。@FedericoklezCulloca是的,我错过了,现在它可以工作了@这是正确的答案,应该被接受。@这是正确的答案,应该被接受。