2015-12-21 277 views
0

我试图过滤或从对象数组中删除一些重复的对象。这是我的。在数组中过滤重复的对象并通过两个属性过滤

var itemsToFilter = []; 
var filteredItems = []; 
var items = []; 

function filterRepeated (data) { 

    _.forEach(data, function(e) { 
    if(e.readingTime) { 
     itemsToFilter.push(e); 
    } else { 
     items.push(e); 
    } 
    }); 

    filteredItems = _.uniq(itemsToFilter, 'id'); 
    items.push.apply(items, filteredItems); 

    return items; 
} 

我用这个函数做什么是分离一些对象,如果他们有属性readingTime。数组itemsToFilter包含重复的对象,我试图按id和readingTime过滤这样的东西。

var a = itemsToFilter.filter(function(n) { 
    console.log(n); 
    if(n['id'].indexOf() !== -1 && n['readingTime'].indexOf() !== -1) { 
     console.log(n); 
     //return true; 
    } else { 
     return false; 
    } 
    }); 

但它什么也没做。

我试图筛选对象的格式:

[{time: 1450672782667, sequence_number: 55240001, readingTime: 1450669920000, id: "56572093c007a1164a02a78c", tipo: "Posición actualizada"}, {time: 1450672782667, sequence_number: 55240001, readingTime: 1450669920000, id: "56572093c007a1164a02a78c", tipo: "Posición actualizada"}] 

感谢。

+0

你能看到控制台中的任何错误吗? –

+0

不,只是返回一个空数组。 – Diego

+0

你的问题不清楚。你到底在做什么?试图过滤重复的对象,或过滤具有'readingTime'属性的对象,或者您是否想过滤'readingTime'具有相同值的对象?在你的例子中,数组只包含一个对象,其中'readingTime'定义了两次。请解释,谢谢。 – DavidDomain

回答

0
 var arr = []; 
     var a = itemsToFilter.filter(function(n) { 
     console.log(n); 
     if(arr.indexOf(n['id']) !== -1 && arr.indexOf(n['readingTime']) !== -1) { 

      return true; 
     } else { 
arr.push(n['id']); 
      arr.push(n['readingTime']); 
      return false; 
     } 
     }); 
+0

感谢您的回答,我已经尝试了您的代码,但仍然给我一个空数组,我知道我错过了一些东西。 – Diego

+0

抱歉格式不正确,这应该起作用。 – zahreelay

+0

zahreelay,是否有一种方法来过滤整个对象,而不是创建一个新的对象与ID和readingTime,我不知道我是否清楚在我的第一篇文章。感谢您的回答。 – Diego