¿Cómo puedo eliminar duplicados de una matriz someArray como la siguiente en función de la propiedad del name dada la condición de que si el name es el mismo para dos elementos pero para uno de ellos el type es new , se conservará el original (sin tipo nuevo)?
someArray = [{id: 1, name:"apple"}, {id: 2, name:"mango"}, {id: 3, name:"apple", type: "new"}, {id: 4, name:"orange"}, {id: 5, name:"orange", type: "new"}, {id: 6, name: "pineapple", type: "new"}]
a
[{id: 1, name:"apple"}, {id: 2, name: "mango"}, {id: 4, name:"orange"}, {id: 6, name: "pineapple", type: "new"}]
Puede usar Array.prototype.reduce y filtrar los elementos que cumplen la condición.
const input = [ { id: 1, name: "apple" }, { id: 2, name: "mango" }, { id: 3, name: "apple", type: "new" }, { id: 4, name: "orange" }, { id: 5, name: "orange", type: "new" }, { id: 6, name: "pineapple", type: "new" }, ], output = Object.values( input.reduce((r, o) => { if (!r[o.name] || (r[o.name].type === "new" && o.type !== "new")) { r[o.name] = o; } return r; }, {}) ); console.log(output);También puede hacerlo utilizando la sintaxis extendida .
const input = [ { id: 1, name: "apple" }, { id: 2, name: "mango" }, { id: 3, name: "apple", type: "new" }, { id: 4, name: "orange" }, { id: 5, name: "orange", type: "new" }, { id: 6, name: "pineapple", type: "new" }, ], output = Object.values( input.reduce( (r, o) => !r[o.name] || (r[o.name].type === "new" && o.type !== "new") ? { ...r, [o.name]: o } : r, {} ) ); console.log(output);Puede iterar su matriz y evaluar si es 'tipo: nuevo' y aún no existe, luego extraiga el elemento.
let someArray = [{ id: 1, name: "apple" }, { id: 2, name: "mango" }, { id: 3, name: "apple", type: "new" }, { id: 4, name: "orange" }, { id: 5, name: "orange", type: "new" }, { id: 6, name: "pineapple", type: "new" }]; console.info('Initial value:' + JSON.stringify(someArray)); someArray.forEach(function(item, index, object) { if (item.type === 'new' && someArray.filter(val => val.name === item.name && !val.type)) { object.splice(index, 1); } }); console.info('Desired Result:' + JSON.stringify(someArray));Puede usar Asignar a los valores del club por nombre y, en caso de que haya dos valores con el mismo nombre, use el que no tiene type = "new"
let someArray = [{id: 3, name:"apple", type: "new"}, {id: 1, name:"apple"}, {id: 2, name:"mango"}, {id: 4, name:"orange"}, {id: 5, name:"orange", type: "new"}, {id: 6, name: "pineapple", type: "new"}] function getUnique(arr){ let mapObj = new Map() arr.forEach(v => { let prevValue = mapObj.get(v.name) if(!prevValue || prevValue.type === "new"){ mapObj.set(v.name, v) } }) return [...mapObj.values()] } console.log(getUnique(someArray))