【发布时间】:2019-12-21 01:25:14
【问题描述】:
我有一系列年份,我正在使用 ECMAScript 进行过滤,以从另一个年份数组中找到介于两年之间范围内的动物的匹配项。
我在回调中调用 buildList(animal) 的 for 循环不起作用,因为它每年都在迭代并忽略我在 for 循环中放置的条件。
我使用 jQuery 使用了两个 $.each,一个用于遍历年份,一个嵌套的 $.each 用于将当前年份与动物年份进行比较。
** 我在代码中的 cmets 显然被剥离了。预期结果是显示每只动物,但如果它们的动物日期在动物年范围内,则显示动物日期并显示它介于两年之间。
我提供的名为 buildList_example() 的示例函数演示了预期的结果,但在动物年的条件下使用了硬编码迭代器[0]
// array of years
let animalyears = ['1970', '1980', '1990', '2000', '2001']
// static data
let data = {
"animals": [{
"animaldate": "1972",
"title": "Sparky"
},
{
"animaldate": "1975",
"title": "Max"
},
{
"animaldate": "1980",
"title": "Fido"
},
{
"animaldate": "1981",
"title": "Frank"
},
{
"animaldate": "1994",
"title": "Fiona"
}
]
}
var allAnimals = data.animals;
var animalList
allAnimals.map((animal) => buildList(animal))
function buildList(animal) {
for (var i = 0; i < animalyears.length; i++) {
animalList += `<div class="animal">`
if (animal.animaldate >= animalyears[i] && animal.animaldate < animalyears[i + 1]) {
animalList += `<h1> ${animal.animaldate} </h1>`
animalList += `<p> ${animal.title} </p>`
animalList += `<p> Falls between ${animalyears[i]} and ${animalyears[i + 1]}</p>`
} else {
animalList += `<p> ${animal.animaldate} </p>`
animalList += `<p> ${animal.title} </p>`
}
animalList += `</div>`
}
}
function buildList_example(animal) {
animalList += `<div class="animal">`
if (animal.animaldate >= animalyears[0] && animal.animaldate < animalyears[0 + 1]) {
animalList += `<h1> ${animal.animaldate} </h1>`
animalList += `<p> ${animal.title} </p>`
animalList += `<p> Falls between ${animalyears[0]} and ${animalyears[0 + 1]}</p>`
} else {
animalList += `<p> ${animal.animaldate} </p>`
animalList += `<p> ${animal.title} </p>`
}
animalList += `</div>`
}
var output = document.getElementById("output")
output.innerHTML = animalList
.animal {
border: 1px solid black;
display: flex;
flex-flow: column;
}
<div id="output">
</div>
【问题讨论】:
-
错误似乎与问题无关。
-
循环是否应该为年份和动物的每个组合添加一个
<div class="animal">?因为这就是它现在所做的。它根本没有忽略条件,但您的条件仅决定循环是否添加div, p, p或div, h1, p, p。它不会跳过不属于年份范围的动物。 -
不,我刚刚发现我的 cmets 在我添加它们并在帖子顶部进行说明时被删除了。调用 buildList_example() 会显示所需的结果,但它使用的是硬编码的迭代器,当我在函数内添加一个 for 循环时,我得到“未定义”返回,因此出现了问题。
-
嗯。似乎很奇怪。无论如何,可能是这样的? jsfiddle.net/khrismuc/90kjw6tz
标签: javascript