Filterarray zum Entfernen doppelter Werte basierend auf der Bedingung in Javascript [Duplikat]

Aug 25 2020

Ich habe ein Array mit Dulipacte-Werten

let myArray=[
    {name: "apple", cost: "10"},
    {name: "apple", cost: "20"},
    {name: "bannana", cost: "10"},
    {name: "mango", cost: "20"},
    {name: "apple", cost: "5"},
    {name: "mango", cost: "50"}
    {name: "orange", cost: "30"}
]

und ich möchte Duplikate entfernen, deren Kosten niedrig sind ... erwartete Ausgabe wird sein ...

let myArray=[
    {name: "apple", cost: "20"},
    {name: "bannana", cost: "10"},
    {name: "mango", cost: "50"}
    {name: "orange", cost: "30"}
]

Danke im Voraus

Antworten

TerryLennox Aug 25 2020 at 15:28

Sie können Array.reduce verwenden , um das gewünschte Ergebnis zu erhalten. Wir erstellen ein Objekt / eine Karte mit einer Eigenschaft für jeden Produktnamen.

Wenn das auf der Karte gespeicherte Produkt kostengünstiger ist oder nicht vorhanden ist, ersetzen wir es, während wir die Liste der Produkte auflisten.

Wir verwenden dann Object.values, um wieder in ein Array zu verwandeln.

let myArray = [
    {name: "apple", cost: "10"},   
    {name: "apple", cost: "20"},
    {name: "bannana", cost: "10"},
    {name: "mango", cost: "20"},
    {name: "apple", cost: "5"},
    {name: "mango", cost: "50"},
    {name: "orange", cost: "30"}
]

let result = myArray.reduce((res, product) => { 
    
    if (!res[product.name]) {
        // The product does not exist in the map, add it
        res[product.name] = product;
    } else if (Number(res[product.name].cost) < Number(product.cost)) { 
        // A cheaper product exists, replace it. 
        res[product.name] = product;
    }
    return res;
}, {});

console.log(Object.values(result));