我试图找到一种方法从数组中排除某些条目,如下所示:
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等等。
由于
答案 0 :(得分:3)
这很有效。数组将被遍历并分类为type
为key
的对象,最多3个不同的对象,基于lastModified
为value
。
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,以便有效删除我使用过的重复项。