2016-08-23 3 views
1

Mit lodash ist es möglich, ein Array von einem anderen zu entfernen, während Duplikate vermieden werden.Entfernen von Duplikaten durch Verwendung von lodash difference

ich zur Zeit mit _.difference

// this returns [4] 
_.difference([1, 1, 1, 2, 2, 2, 3, 4], [1, 2, 3]) 

// I want it to return [1, 1, 2, 2, 4] 
+1

Ihr Problem sehr zweideutig. Es ist unklar, welches Vorkommen jedes Elements aus dem ersten Array entfernt werden sollte. Angenommen, Sie haben diese Arrays: '[1, 1, 2, 2, 1, 2, 3, 4], [1, 2, 3]'. Was erwarten Sie im Ergebnis? – hindmost

+0

hmm, guter Punkt. Ich möchte die erste Instanz jedes Elements im zweiten Array entfernen. so wäre das [1,2,1,2,3,4] – Finnnn

+0

AFAIK lodash hat kein solches Verfahren zur Verwendung bereit. Ich würde vorschlagen, geschachtelte for-Schleife zu verwenden. – hindmost

Antwort

3

Dies ist, wie ich es durch reine JS tun würde

var arr1 = [1, 1, 1, 2, 2, 2, 3, 4], 
 
    arr2 = [1, 2, 3], 
 
    result = arr2.reduce((p,c) => {var idx = p.indexOf(c); 
 
           return idx === -1 ? p : (p.splice(idx,1),p)}, arr1); 
 
console.log(result);

1

Basierend auf Kommentar von @hindmost, benutzte ich eine Schleife.

var tempArray = [1,1,1,2,2,2,3,3,1,2] 

_.each([1, 2, 3], function(value) { 
    tempArray.splice(tempArray.indexOf(value), 1); 
}); 
1

Ja, es wird 4 zurück, weil _.difference das neue Array von Kosten gefiltert values.I versucht, Java Script Lösung. Hoffe es wird dir helfen.

function keepDuplicate(array1, array2){ 
    var occur; 
    var indexes = []; 
    _.each(array2, function(value){ 
    _.each(array1, function(ar1value, index){ 
    if(value === ar1value){ 
     occur = index; 
    } 
    }); 
    indexes.push(occur); 
    }); 
    _.each(indexes, function(remove, index){ 
    if(index === 0){ 
    array1.splice(remove, 1); 
    } 
    else{ 
    remove = remove-index; 
    array1.splice(remove,1); 
    } 
}); 
return array1; 
} 

keepDuplicate([1, 1, 1, 2, 2, 2, 3, 4], [1, 2, 3])

Es wird zurück [1, 1, 2, 2, 4]

+0

Dieser Code wird einzelnen Wert aus dem ersten Array entfernen, das sich im zweiten Array befindet. –

Verwandte Themen