2017-05-12 1 views
0

Je travaille sur ce code où j'ai besoin de filtrer un tableau avec plusieurs éléments identiques, qui ressemble à ceci;JavaScript - Filtrage du tableau avec des éléments identiques

vacant = [ 
"A510.4 - 0h 45 m", 
"A520.6 - 3h 0 m", 
"A250.1 - 3h 0 m", 
"A340.1 - 3h 15 m", 
"A320.2 - 3h 0 m", 
"A240.4 - 4h 0 m", 
"A210.3 - 4h 0 m", 
"A520.5 - 5h 0 m", 
"A250.1 - 6h 0 m", 
"A240.4 - 7h 0 m", 
"A320.6 - 8h 0 m", 
"A340.1 - 8h 0 m"] 

Les éléments identiques dans le uniqueVacant - tableau sont les suivants:

A250.1 - 3h 0 m/A250.1 - 6H 0 m

A340.1 - 3 h 15 m/A340.1 - 8h 0 m

A240.4 - 4h 0 m/A240.4 - 7H 0 m

J'ai déjà filtré l'horodatage des éléments de sorte que la seule chose nécessaire est de comparer les noms des éléments;

function getName(str) { 
    return str.substring(0, str.indexOf('-')); 
} 

var uniqueVacant = []; 
vacant.forEach(function (vacantStr) { 
    uniqueVacant.push(getName(vacantStr)) 
}); 

Les résultats devraient ressembler à ceci, ne laissant que le premier élément avec le même nom et le retrait du second qui imprime plus tard;

uniqueVacant = [ 
"A510.4 - 0h 45 m", 
"A520.6 - 3h 0 m", 
"A250.1 - 3h 0 m", 
"A340.1 - 3h 15 m", 
"A320.2 - 3h 0 m", 
"A240.4 - 4h 0 m", 
"A210.3 - 4h 0 m", 
"A520.5 - 5h 0 m", 
"A320.6 - 8h 0 m"] 

// Removed A250.1 - 6h 0 m, A340.1 - 8h 0 m, A240.4 - 7h 0 m, 

Notez que lorsque la minuterie est en place pour les éléments, ils sont retirés à partir du tableau et après que le deuxième élément avec le même nom doit apparaître à dans le tableau, s'il n'y a pas plus de similitudes à l'intérieur du tableau . Les similitudes varient également d'un jour à l'autre, parfois il n'y a que 2 éléments similaires et d'autres jours il peut être de 8 ou plus.

Un moyen rapide et efficace de le faire?

+0

vous devez trouver l'unique élément est pas? –

+0

@NairAthul J'ai besoin de trouver les éléments identiques à l'intérieur du tableau puis de le filtrer, en ne laissant que le premier élément du même nom et en supprimant le second. – IlariM

Répondre

1

Essayez avec Array#reduce

var vacant = [ 
 
    "A510.4 - 0h 45 m", 
 
    "A520.6 - 3h 0 m", 
 
    "A250.1 - 3h 0 m", 
 
    "A340.1 - 3h 15 m", 
 
    "A320.2 - 3h 0 m", 
 
    "A240.4 - 4h 0 m", 
 
    "A210.3 - 4h 0 m", 
 
    "A520.5 - 5h 0 m", 
 
    "A250.1 - 6h 0 m", 
 
    "A240.4 - 7h 0 m", 
 
    "A320.6 - 8h 0 m", 
 
    "A340.1 - 8h 0 m" 
 
] 
 

 
console.log(vacant.reduce((a, b) => { 
 
    var k = a.map(a => a.split('-')[0]) 
 
    if (!k.includes(b.split("-")[0])) { 
 
    a.push(b) 
 
    k.push(b.split("-")[0]) 
 
    } 
 
    return a; 
 
}, []))