¿Cómo encontrar nombres por id? Tengo dos matrices y quiero encontrar nombres por sus id.
person: [ {id: 1, name: 'abc'}, {id: 2, name: 'xyz'}, {id: 3, name: 'pqr'}, ] data: [ {id: 1, personId: [1,2,3]}, {id: 2, personId: [1,3]}, {id: 3, personId: [1,2]}, ]Salida esperada :
personId: [1,2,3] return // abc,xyz,pqr personId: [1,3] return // abc,pqr personId: [1,2] return // abc,xyzEstoy usando react-native. He intentado esto :
for (let person of this.state.data) { for (let personName of person['personId']){ let name = this.state.person.find(nme => nme['id'] === personName); alert(name); } }Cualquier ayuda sería muy apreciada
Puedes usar buscar
result = [] for (let i=0; i < personId.length; i++) { result.push(person.find(data => data.id === personId[i]).name); }para poder recuperar objetos en su matriz de personas en función de la identificación.
Supongo que son datos JSON stringificados o un JSON en general. Por lo tanto, primero puede analizarlo en un objeto JS para que le resulte más fácil usar JS. Pero déjame dejarte esa parte a ti. Cambié sus datos a una matriz para poder mostrarle directamente lo que haría si ayuda. Es bueno usar métodos que no alteren los datos originales. Así que utilicé los métodos de matriz slice, forEach y map en este caso. De esta manera, puede crear de forma segura nuevos datos que son una réplica de los datos (var data) pero incluyendo la nueva propiedad 'personNames', que se asigna desde la otra variable (persona).
const person = [ {id: 1, name: 'abc'}, {id: 2, name: 'xyz'}, {id: 3, name: 'pqr'}, ]; const data = [ {id: 1, personId: [1,2,3]}, {id: 2, personId: [1,3]}, {id: 3, personId: [1,2]}, ]; // not to mutate your original data, just in case const dataWithNames = data.slice(); // console.log(dataWithNames); // modifying new data to include personNames property dataWithNames.forEach( eachData => { // let eachIdP = eachData.personId; // creating new array by mapping person id to names from person data let mappedNames = eachData.personId.map( pID => { // goes to refer person data with same id person.forEach( eachPerson => { if ( eachPerson.id === pID ) { pID = eachPerson.name; } } ); return pID; } ); // console.log(mappedNames); // adding new property 'personNames' and // assign them to respective mappedNames eachData.personNames = mappedNames; } ); // console.log(dataWithNames);Esto le dará lo siguiente.
/* [ { id: 1, personId: [ 1, 2, 3 ], personNames: [ 'abc', 'xyz', 'pqr' ] }, { id: 2, personId: [ 1, 3 ], personNames: [ 'abc', 'pqr' ] }, { id: 3, personId: [ 1, 2 ], personNames: [ 'abc', 'xyz' ] } ]*/Espero que esto ayude.