Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 相同名称和日期的筛选器数组_Javascript_Arrays - Fatal编程技术网

Javascript 相同名称和日期的筛选器数组

Javascript 相同名称和日期的筛选器数组,javascript,arrays,Javascript,Arrays,在以下条件下,过滤上述数组的最佳方法是什么 *如果名称相同,则过滤掉所有具有相同名称的对象,只留下最后日期的对象 我所能想到的就是做循环。请注意,Date是一个真实的dateObject,而不是我在上面写的字符串,这意味着您可以进行日期比较。这有帮助吗 var Array = [{"Name":"Temp","Date":"2014-10-23"}, {"Name":"Temp","Date":"2014-10-22"}, {"Name":"Temp","Date":"2014-10-18"},

在以下条件下,过滤上述数组的最佳方法是什么

*如果名称相同,则过滤掉所有具有相同名称的对象,只留下最后日期的对象

我所能想到的就是做循环。请注意,Date是一个真实的dateObject,而不是我在上面写的字符串,这意味着您可以进行日期比较。

这有帮助吗

var Array = [{"Name":"Temp","Date":"2014-10-23"},
{"Name":"Temp","Date":"2014-10-22"},
{"Name":"Temp","Date":"2014-10-18"},
{"Name":"Temp","Date":"2014-10-19"},
{"Name":"Temp2","Date":"2014-10-12"},
{"Name":"Temp2","Date":"2014-06-12"}]
这有用吗

var Array = [{"Name":"Temp","Date":"2014-10-23"},
{"Name":"Temp","Date":"2014-10-22"},
{"Name":"Temp","Date":"2014-10-18"},
{"Name":"Temp","Date":"2014-10-19"},
{"Name":"Temp2","Date":"2014-10-12"},
{"Name":"Temp2","Date":"2014-06-12"}]
使用Array.reduce,我可以将其分解为一个只包含Temp和Temp2及其日期的对象:

$.grep(Array, function(v) {
        return v.Name === "Temp";
    }).reduce(function (a, b) { return a.Date > b.Date ? a : b; });
使用Array.reduce,我可以将其分解为一个只包含Temp和Temp2及其日期的对象:

$.grep(Array, function(v) {
        return v.Name === "Temp";
    }).reduce(function (a, b) { return a.Date > b.Date ? a : b; });
按名称将数组加总为{name:'Temp',日期:['2014-10-23','2013-10-32','xxxx']} 然后通过Math.max.apply获得最大日期

   var Array = [{"Name":"Temp","Date":"2014-10-23"},
{"Name":"Temp","Date":"2014-10-22"},
{"Name":"Temp","Date":"2014-10-18"},
{"Name":"Temp","Date":"2014-10-19"},
{"Name":"Temp2","Date":"2014-10-12"},
{"Name":"Temp2","Date":"2014-06-12"}]

var result = {};
Array.forEach(function(item) {
  var name = item['Name'];
  if(result[name]) {
    result[name].push(item['Date']);
  } else {
    result[name] = [item['Date']];
  }
})
Object.keys(result).forEach(function(item) {
  result[item] = Math.max.apply(null, result[item]);
})
按名称将数组加总为{name:'Temp',日期:['2014-10-23','2013-10-32','xxxx']}
然后通过数学得到最大日期。max.apply

在这里,适用于任何随机订单

   var Array = [{"Name":"Temp","Date":"2014-10-23"},
{"Name":"Temp","Date":"2014-10-22"},
{"Name":"Temp","Date":"2014-10-18"},
{"Name":"Temp","Date":"2014-10-19"},
{"Name":"Temp2","Date":"2014-10-12"},
{"Name":"Temp2","Date":"2014-06-12"}]

var result = {};
Array.forEach(function(item) {
  var name = item['Name'];
  if(result[name]) {
    result[name].push(item['Date']);
  } else {
    result[name] = [item['Date']];
  }
})
Object.keys(result).forEach(function(item) {
  result[item] = Math.max.apply(null, result[item]);
})
array = [];
for(var name in obj){
    array.push({Name: name, Date: obj[name]});
}

给你,适合任何随机订单

array = [];
for(var name in obj){
    array.push({Name: name, Date: obj[name]});
}

我建议不要覆盖数组对象。无论如何 一种方法是使用对象对日期进行分组:

var Array = [{"Name":"Temp","Date":"2014-10-03"},
{"Name":"Temp","Date":"2014-10-22"},
{"Name":"Temp","Date":"2014-10-18"},
{"Name":"Temp","Date":"2014-10-19"},
{"Name":"Temp2","Date":"2014-10-12"},
{"Name":"Temp2","Date":"2014-06-12"}];

var tempArray = []; //This array will hold your Result Set

var tempArrayName = [];

var tempDate = {};

$.each(Array, function(i, v) {

  if(tempArrayName.indexOf(Array[i].Name) < 0){
    tempArray.push({ "Name":Array[i].Name,"Date":Array[i].Date});
    tempArrayName.push(Array[i].Name);
    tempDate[Array[i].Name] = Array[i].Date;
  }else{
   if( new Date((Array[i].Date))> new Date(tempDate[Array[i].Name])){

      $.each(tempArray, function(j, k) {
        if(tempArray[j].Name == Array[i].Name){
          tempArray[j].Date = Array[i].Date;
        }
      });
    }   
  }

});


console.log(tempArray);
并从中创建一个“过滤”数组,如果您需要的话 需要,那么:

var data = [
    {"Name":"Temp","Date": new Date("2014-10-23")},
    {"Name":"Temp","Date": new Date("2014-10-22")},
    {"Name":"Temp","Date": new Date("2014-10-18")},
    {"Name":"Temp","Date": new Date("2014-10-19")},
    {"Name":"Temp2","Date": new Date("2014-10-12")},
    {"Name":"Temp2","Date": new Date("2014-06-12")}
];

var name2dates = Object.create(null);
data.forEach(function(thing){
    if(!name2dates[thing.Name]){
        name2dates[thing.Name] = thing.Date;
    }else{
        name2dates[thing.Name] = thing.Date > name2dates[thing.Name] ?
            thing.Date : name2dates[thing.Name];
    }
});

我建议不要覆盖数组对象。无论如何 一种方法是使用对象对日期进行分组:

var Array = [{"Name":"Temp","Date":"2014-10-03"},
{"Name":"Temp","Date":"2014-10-22"},
{"Name":"Temp","Date":"2014-10-18"},
{"Name":"Temp","Date":"2014-10-19"},
{"Name":"Temp2","Date":"2014-10-12"},
{"Name":"Temp2","Date":"2014-06-12"}];

var tempArray = []; //This array will hold your Result Set

var tempArrayName = [];

var tempDate = {};

$.each(Array, function(i, v) {

  if(tempArrayName.indexOf(Array[i].Name) < 0){
    tempArray.push({ "Name":Array[i].Name,"Date":Array[i].Date});
    tempArrayName.push(Array[i].Name);
    tempDate[Array[i].Name] = Array[i].Date;
  }else{
   if( new Date((Array[i].Date))> new Date(tempDate[Array[i].Name])){

      $.each(tempArray, function(j, k) {
        if(tempArray[j].Name == Array[i].Name){
          tempArray[j].Date = Array[i].Date;
        }
      });
    }   
  }

});


console.log(tempArray);
并从中创建一个“过滤”数组,如果您需要的话 需要,那么:

var data = [
    {"Name":"Temp","Date": new Date("2014-10-23")},
    {"Name":"Temp","Date": new Date("2014-10-22")},
    {"Name":"Temp","Date": new Date("2014-10-18")},
    {"Name":"Temp","Date": new Date("2014-10-19")},
    {"Name":"Temp2","Date": new Date("2014-10-12")},
    {"Name":"Temp2","Date": new Date("2014-06-12")}
];

var name2dates = Object.create(null);
data.forEach(function(thing){
    if(!name2dates[thing.Name]){
        name2dates[thing.Name] = thing.Date;
    }else{
        name2dates[thing.Name] = thing.Date > name2dates[thing.Name] ?
            thing.Date : name2dates[thing.Name];
    }
});

如果数组中对象的顺序是随机的,这会起作用吗?我没有测试,但它应该起作用。如果数组中对象的顺序是随机的,这会起作用吗?我没有测试,但它应该起作用。IMHO除了循环for或forEach外,在JS中没有合理的方法来这样做。IMHO除了循环for或forEach之外,在JS中没有合理的方法来这样做。