Tengo el objeto a continuación con diferentes matrices y quiero eliminar los nombres duplicados que se muestran. ¿Cómo puedo hacer eso?
Cómo se ven los nombres duplicados
Los datos se están imprimiendo de esta manera.
El dsUserId es lo que se repite. Y quiero poder eliminar duplicados dsUserId
Aquí es donde se generan todos los datos.
this.setState({ user_connections: results.data.data.connections, newLeads: results2.data.data, promotion: results3.data.data, hasPromotion: results3.data.data.length === 0 ? false : true, promoPlan: promoPlan, toRemoveDays: excludedDays }); console.log("All data", this.state.user_connections) }Y aquí es donde se procesan los datos.
<select id="user_select" style={{ width: "70%" }} name="selectedUser" onChange={e => { this.setState({ [e.target.name]: e.target.value.trim() }); }} className="form-control" > <option value={null} disabled hidden selected> Please Select </option> {this.state.user_connections.map(u => ( <option value={u.parentId} key={u.parentId}> {u.displayName} </option> ))} </select>Puede usar el filter para lograr esto, por ejemplo:
const userConnections = (connections) => { const uniqueIds = []; return connections.filter(connection => { if (!uniquesIds.includes(connection.dsUserId) { uniqueIds.push(connection.dsUserId); return connection; } }) };y entonces :
user_connections: userConnections(results.data.data.connections)No estoy seguro de si es la mejor manera, pero primero haría un conjunto de todos los dsUserId únicos y luego filtraría el primero en la matriz de conexiones de usuario para cada dsUserId:
let tsUserIds = []; this.state.user_connections.forEach(user => { tsUserIds.push(user.dsUserId); }) tsUserIds = [...new Set(tsUserIds)]; // filters out the duplicates let uniqueConnections = []; tsUserIds.forEach(id => { uniqueConnections.push(this.state.user_connections.filter(user => user.dsUserId === id)[0]); }) console.log(uniqueConnections);