我想过滤员工的详细信息..因为我有选择选项包含数字和字符串...我可以在对象中过滤字符串,但不能使其数字...请指导我
<select id="endDate" onchange="sortEDate()">
<option value="All Years">All Years</option>
<option value="Past Years">Past Years</option>
<option value="Present">Present</option>
</select>
<p id="demo1"></p>
const employees = [
{ firstname: "Dav", start: 2013, end: 2018 },
{ firstname: "Gemmy", start: 2016, end: "Present" }
]
function sortEDate() {
const filterDate = [];
let cDate = document.getElementById("endDate").value;
employees.forEach(function(item, index, array) {
if (item.end === cDate) {
filterDate.push(item);
}
});
let fDate = "<table>";
filterDate.forEach(function(filterDate) {
fDate += "<tr>";
fDate += "<td>" + filterDate.firstname + "</td>";
fDate += "<td>" + filterDate.start + "</td>";
fDate += "<td>" + filterDate.end + "</td>";
fDate += "</tr>";
});
fDate += "</table>";
document.getElementById("demo1").innerHTML = fDate;
let allEducation = document.getElementById("endDate").value;
if (allEducation === "All Years") {
showEmployees();
}
}
在下面,如果块尝试使用 ==
而不是 ===
if (item.end == cDate) {
filterDate.push(item);
}
我进行了一些更改,以使此工作按预期进行。我将label
以及value
用于option
元素,并将实际选择值传递给了Select onchange
处理程序。另外,我将 load
上的项目加载到身体上,您可以删除我只是想在页面加载等时加载它们。由于您不使用jQuery,它在onload
事件处理程序等上。
const employees = [{
firstname: "Dav",
start: 2013,
end: 2018
},
{
firstname: "Gemmy",
start: 2016,
end: "Present"
}
]
function filterDates(sel) {
let filterDate = []
sel = sel || "All"
filterDate.push(...employees.filter(function(obj) {
switch (sel) {
case "All":
return true // return all
case "Past":
return obj.end < new Date().getFullYear() // just past years
case "Present":
return obj.end === 'Present'
}
}))
let fDate = "<table>";
filterDate.forEach(function(filterDate) {
fDate += "<tr>";
fDate += "<td>" + filterDate.firstname + "</td>";
fDate += "<td>" + filterDate.start + "</td>";
fDate += "<td>" + filterDate.end + "</td>";
fDate += "</tr>";
});
fDate += "</table>";
document.getElementById("demo1").innerHTML = fDate;
}
<body onload="filterDates()">
<select id="endDate" onchange="filterDates(this.value);">
<option label="All Years" value="All">All Years</option>
<option label="Past Years" value="Past">Past Years</option>
<option label="Present" value="Present">Present</option>
</select>
<p id="demo1"></p>
<body/>
关键是我不想更改太多的过滤,因此我在大多数情况下离开了您如何使用array.filter.filter和 switch
,以了解如何基于基于过滤选定的选项。