我希望能够从输入字段中搜索10-20岁的年龄范围,并获得该搜索中的人员,姓名和年龄。
这就是我的数据结构
var customers = [
{
name: "Rocky Green",
birthdate: "1988-10-01"
},
{
name: "Sara Pink",
birthdate: "1982-03-15"
},
{
name: "Tom Black",
birthdate: "1995-01-25"
},
]
这是我目前拥有的代码,它根据日期字符串计算年龄
function getAge(dateString)
{
var today = new Date();
var birthDate = new Date(dateString);
var age = today.getFullYear() - birthDate.getFullYear();
var m = today.getMonth() - birthDate.getMonth();
if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate()))
{
age--;
}
return age;
}
getAge("1995-01-25");
console.log(getAge("1995-01-25"));
但这对我来说有点先进。
答案 0 :(得分:2)
您可以使用array .filter()
method创建一个仅包含符合条件的元素的新数组。
以下内容(使用现有的getAge()
函数)。出于演示目的,我只使用了一个简单的按钮和输入,通过.querySelector()
访问,而没有使用元素ID或任何东西,并且我还没有包含任何输入验证 - 在您的真实项目中,您可以使用[&1;} d想要添加一些代码以确保用户输入有效范围。
给定字符串"10-20"
,您可以提取&#34; 10&#34;和&#34; 20&#34;使用string .split()
method,分割"-"
。结果将是一个包含两个数字为字符串的数组,因此我使用unary plus operator将这些数字转换为数字,以便将它们与每个数字的年龄进行比较人
document.querySelector("button").addEventListener("click", function() {
var range = document.querySelector("input").value.split("-")
var lower = +range[0]
var upper = +range[1]
var results = customers.filter(function(v) {
var age = getAge(v.birthdate)
return age >= lower && age <= upper
})
console.log(results)
})
var customers = [
{ name: "Rocky Green", birthdate: "1988-10-01" },
{ name: "Sara Pink", birthdate: "1982-03-15" },
{ name: "Tom Black", birthdate: "1995-01-25" }
]
function getAge(dateString) {
var today = new Date();
var birthDate = new Date(dateString);
var age = today.getFullYear() - birthDate.getFullYear();
var m = today.getMonth() - birthDate.getMonth();
if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
return age;
}
&#13;
<label>Age range: <input value="10-30"></label>
<button>Filter</button>
&#13;