Estoy buscando una solución hermosa. Tengo elementos de matriz. El elemento consiste en user_id y alguna otra información. Necesito mapear todos los elementos y para cada elemento encontrar al usuario con la identificación adecuada. Luego agregue al elemento alguna información del usuario
items = items.map((item) => { let user = users.find(u => item.user_id === u.id); item.email = user.email; item.user_name = user.name; return item; });Pero si el usuario con item.user_id no existe, no debo hacer nada. Ya tengo iteraciones de dos arreglos y no quiero agregar más
Depende de lo que quieras decir con "omitir elemento".
Si quiere decir "no incluirlo en la matriz de salida", entonces tendrá que dejar de lado el map , porque el map siempre producirá un elemento de salida para un elemento de entrada. En su lugar, puede simplemente recorrer empujando a una nueva matriz:
const originalItems = items; items = []; for (const item of originalItems) { let user = users.find(u => item.user_id === u.id); if (user) { item.email = user.email; item.user_name = user.name; items.push(item); } } Si solo quiere decir "no agregue la información del user " (pero mantenga los elementos a los que no agrega información), entonces puede ramificar:
items = items.map((item) => { let user = users.find(u => item.user_id === u.id); if (user) { item.email = user.email; item.user_name = user.name; } return item; }); Sin embargo, eso plantea la pregunta de por qué está usando el map , ya que no parece haber muchas razones de inmediato para crear una nueva matriz con los mismos objetos (incluso si estamos agregando a esos objetos). Si está utilizando algo como React, donde las actualizaciones de estado no deben modificar los objetos existentes, le gustaría crear un nuevo item para cualquier elemento que haya cambiado:
items = items.map((item) => { let user = users.find(u => item.user_id === u.id); if (user) { item = { ...item, email: user.email, user_name = user.name, }; } return item; });Pero puede que no estés haciendo eso, no lo has dicho.
Tal vez intente:
array.map(x => condition ? parse(x) : x);algo como eso