2015-07-04 2 views
-1
var cars = [ 
    { year: 2007, model: "Ford F-150" }, 
    { year: 2011, model: "Toyota Camry" }, 
    { year: 2007, model: "Ford F-150" }, 
    { year: 2007, model: "Ford F-150" }, 
    { year: 2005, model: "Dodge RAM" } 
    { year: 2005, model: "Dodge RAM" }; 
]; 

Как удалить дубликаты из этого списка массивакак удалить дубликаты из списка массива

+0

У Вас есть недостающая запятая и дополнительная с запятой. – blex

+1

Пахнет домашней работой. – undefined

+0

@Jeff Это не дубликат, OP имеет массив объектов, поэтому эти решения не будут работать в его случае. – dfsq

ответ

2

Легко фильтровать дубли базы на indexOf состоянии, это работает для простых элементов. В вашем случае вы не можете использовать его, потому что два похожих объекта в массиве не идентичны, поэтому indexOf не поможет.

В этой ситуации удобно сделать использование Array.prototype.reduce:

var cars = [ 
 
    { year: 2007, model: "Ford F-150" }, 
 
    { year: 2011, model: "Toyota Camry" }, 
 
    { year: 2007, model: "Ford F-150" }, 
 
    { year: 2007, model: "Ford F-150" }, 
 
    { year: 2005, model: "Dodge RAM" }, 
 
    { year: 2005, model: "Dodge RAM" } 
 
]; 
 

 
cars = cars.reduce(function(prev, curr) { 
 
    var inArray = prev.some(function(car) { 
 
     return car.model === curr.model && car.year === curr.year; 
 
    }); 
 
    if (!inArray) { 
 
     prev.push(curr); 
 
    } 
 
    return prev; 
 
}, []); 
 

 
alert(JSON.stringify(cars, null, 4))

Смежные вопросы