Tengo una matriz de datos que se parece a esto.
data = [ { "name": "Apple", "type": "Fruit"}, { "name": "Cabbage", "type": "Vegetable"} , { "name": "Orange", "type": "Fruit"} ] Quiero filtrar el elemento cuyo type ya existía. Y quiero mantener el primer elemento.
Por ejemplo, mantenga Apple en lugar de Orange
data = [ { "name": "Apple", "type": "Fruit"}, { "name": "Cabbage", "type": "Vegetable"} ]Usando Array#filter , puede iterar sobre la matriz mientras actualiza un Set para realizar un seguimiento de los tipos agregados:
const data = [ { "name": "Apple", "type": "Fruit"}, { "name": "Cabbage", "type": "Vegetable"}, { "name": "Orange", "type": "Fruit"} ]; const typeSet = new Set(); const res = data.filter(({ type }) => { if(typeSet.has(type)) return false; typeSet.add(type); return true; }); console.log(res);1) Puede filtrar el resultado si el type ya no está presente en dict usando el filter y Set como:
data.filter((o) => (dict.has(o.type) ? false : dict.add(o.type, true))) const data = [ { name: "Apple", type: "Fruit" }, { name: "Cabbage", type: "Vegetable" }, { name: "Orange", type: "Fruit" }, ]; const dict = new Set(); const result = data.filter((o) => (dict.has(o.type) ? false : dict.add(o.type, true))); console.log(result) 2) También puede usar for..of y Set como:
const data = [ { name: "Apple", type: "Fruit" }, { name: "Cabbage", type: "Vegetable" }, { name: "Orange", type: "Fruit" }, ]; const dict = new Set(), result = []; for (let o of data) { if (!dict.has(o.type)) { result.push(o); dict.add(o.type); } } console.log(result);