javascript数组过滤包含名称模式和日期时间的对象

时间:2018-06-04 13:08:01

标签: javascript

我试图找到一种方法从数组中排除某些条目,如下所示:

Array = [ 
   Object,
   Object,
   Object
   ...
]

Object看起来像这样

Object = {
    name : 'IT_ThisNameIsContant_20180501_113422',
    lastModified : timeinmilliseconds (number)
}

Object name属性可以以不同的值开头,如IT,KK,MN,后跟_和ThisNameIsConstant是相同的。

我希望根据名称中包含的日期或lastModified属性编号为每个IT,KK,MN等保留3个条目。

数组未排序,因此可以使用IT对KK进行加密,然后是IT,IT,KK,MN,IT,MN等等。

由于

1 个答案:

答案 0 :(得分:3)

这很有效。数组将被遍历并分类为typekey的对象,最多3个不同的对象,基于lastModifiedvalue



var a = [{name:"IT_ThisNameIsContant_20180501_113422",lastModified:123},{name:"IT_ThisNameIsContant_20180501_113422",lastModified:13},{name:"IT_ThisNameIsContant_20180501_113422",lastModified:1245323},{name:"MM_ThisNameIsContant_20180501_113422",lastModified:12334},{name:"NI_ThisNameIsContant_20180501_113422",lastModified:532},{name:"IT_ThisNameIsContant_20180501_113422",lastModified:12234124},{name:"MM_ThisNameIsContant_20180501_113422",lastModified:12312124},{name:"NI_ThisNameIsContant_20180501_113422",lastModified:531232},{name:"IM_ThisNameIsContant_20180501_113422",lastModified:123},{name:"MM_ThisNameIsContant_20180501_113422",lastModified:1444444334},{name:"MM_ThisNameIsContant_20180501_113422",lastModified:532}], result={};

a.forEach(function(elem){
    var type = elem.name.split("_").shift();
    result[type] = result[type] || [];
    result[type].push(elem);
});

Object.keys(result).forEach(function(key){
    var arr = result[key];
    arr = arr.filter(function(elem,index,arr){
       return arr.map(function(mapelem){
          return mapelem.lastModified;
       }).indexOf(elem.lastModified) === index;
    })         //Remove duplicates
    .sort(function(a,b){ return a-b; }); //Sort based on the lastModified
    
    arr.length=Math.min(arr.length,3); //Just keep a maximum of n=3 values
    
    result[key] = arr; //Re-assign the values to the object
});


console.log(result)




请参阅this post,以便有效删除我使用过的重复项。