过滤javascript列表,其中包含年龄范围输入

时间:2017-12-06 02:15:54

标签: javascript jquery arrays

我希望能够从输入字段中搜索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"));

但这对我来说有点先进。

1 个答案:

答案 0 :(得分:2)

您可以使用array .filter() method创建一个仅包含符合条件的元素的新数组。

以下内容(使用现有的getAge()函数)。出于演示目的,我只使用了一个简单的按钮和输入,通过.querySelector()访问,而没有使用元素ID或任何东西,并且我还没有包含任何输入验证 - 在您的真实项目中,您可以使用[&1;} d想要添加一些代码以确保用户输入有效范围。

给定字符串"10-20",您可以提取&#34; 10&#34;和&#34; 20&#34;使用string .split() method,分割"-"。结果将是一个包含两个数字为字符串的数组,因此我使用unary plus operator将这些数字转换为数字,以便将它们与每个数字的年龄进行比较人

&#13;
&#13;
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;
&#13;
&#13;