在JavaScript中,按日期和之后的名称过滤数组

Filter an array by date and after that by Name in JavaScript

本文关键字:过滤 数组 之后 JavaScript 日期      更新时间:2024-03-24

我在js中有一个数组,名为:areas

var areas =  [
 ["Id" : 1, "Date" : "2016-04-01", "Name" : "Ramon"],
 ["Id" : 2, "Date" : "2016-04-01", "Name" : "Ester"],
 ["Id" : 3, "Date" : "2016-04-01", "Name" : "Sandy"],
 ["Id" : 4, "Date" : "2016-04-02", "Name" : "Ruiz"],
 ["Id" : 5, "Date" : "2016-04-03", "Name" : "Mark"],
 ["Id" : 6, "Date" : "2016-04-04", "Name" : "Vadim"],
 ["Id" : 7, "Date" : "2016-04-06", "Name" : "Vanny"],
 ["Id" : 8, "Date" : "2016-04-09", "Name" : "John"]
]

例如,在此之前,我在ajax中有一个过滤器,它将按日期和时间对它们进行分类我为:

for (var i = 0; i < areas.length; i++ ){
      console.log("Date " + areas[i].Date + " Name " + areas[i].Name);
}

输出将是这个

Date 2016-04-01 Name Ramon
Date 2016-04-01 Name Ester
Date 2016-04-01 Name Sandy
Date 2016-04-02 Name Ruiz

但我想知道是否是同一日期按名称过滤

这样:

Date 2016-04-01 Name Ester
Date 2016-04-01 Name Ramon
Date 2016-04-02 Name Ruiz
Date 2016-04-01 Name Sandy

我需要再绕一圈还是怎么绕?

感谢

https://jsfiddle.net/whr4taug/

Filter an array by date and after that by Name in JavaScript

你的问题不言自明-你需要过滤函数,js有-https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

它可以在一个循环中完成所有排序。或者你可以添加多个功能,每个功能都有它的排序

var areas =  [
    {"Id" : 1, "Date" : "2016-04-01", "Name" : "Ramon"},
    {"Id" : 2, "Date" : "2016-04-01", "Name" : "Ester"},
    {"Id" : 3, "Date" : "2016-04-01", "Name" : "Sandy"},
    {"Id" : 4, "Date" : "2016-04-02", "Name" : "Ruiz"},
    {"Id" : 5, "Date" : "2016-04-03", "Name" : "Mark"},
    {"Id" : 6, "Date" : "2016-04-04", "Name" : "Vadim"},
    {"Id" : 7, "Date" : "2016-04-06", "Name" : "Vanny"},
    {"Id" : 8, "Date" : "2016-04-09", "Name" : "John"}
]
var filtered = areas.filter(function(el){
    if (el.Name == 'Ramon' && el.Date == '2016-04-01') return el;
});
console.log(filtered);

此外,你的areas标记是错误的(不确定是否有打字错误)-js没有关联的数组,只有用于该目的的对象

如果你的需求是使用ajax,那么我不确定你为什么需要js?只需执行两个ajax请求,这就是

如果你想在for循环中过滤它们,只需使用相同的比较

for (var i = 0; i < areas.length; i++ ){
  if (areas[i].Name == 'Ramon' && areas[i].Date == '2016-04-01') {
    console.log("Date " + areas[i].Date + " Name " + areas[i].Name);
  }
}