Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

267
Views
¿Por qué podemos omitir una declaración de retorno en este uso del método map()?

Actualmente estoy revisando el tutorial de WebRTC en sus documentos cuando noté que usan forEach después de usar map(). Para usar forEach y esperar un valor en lugar de una matriz indefinida, map() habría necesitado devolver una matriz, lo cual no veo cómo puede hacerlo, porque no devuelve nada.

 function updateCameraList(cameras) { const listElement = document.querySelector('select#availableCameras'); listElement.innerHTML = ''; cameras.map(camera => { const cameraOption = document.createElement('option'); cameraOption.label = camera.label; cameraOption.value = camera.deviceId; }).forEach(cameraOption => listElement.add(cameraOption)); }
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

El código no funcionará ya que el mapa no devuelve nada.

Aquí hay un método alternativo.

 function updateCameraList(cameras) { document.getElementById('availableCameras').innerHTML = cameras .map(({label, deviceId}) => `<option value="${deviceId}">${label}</option>`) .join(""); }

Hoy aprendí que ahora podemos usar etiquetas en lugar de texto

https://jsfiddle.net/mplungjan/osyLzqk2/

Aquí hay una versión más segura ya que hay una pequeña posibilidad para XSS

 function updateCameraList(cameras) { const sel = document.getElementById('availableCameras') cameras.forEach(({label, deviceId}) => { const option = new Option(label,deviceId); sel.add(option) }) }

Y aquí hay un intento de XSS que no funciona, al menos no hace nada en Chrome

 const cameras = [{ deviceId : `xss"></option></select><img src="x" onerror="alert(1)" />` , label:"bla" }] function updateCameraList(cameras) { const xssString = cameras .map(({label, deviceId}) => `<option value="${deviceId}">${label}</option>`) .join("") console.log(xssString) document.getElementById('availableCameras').innerHTML = xssString; } updateCameraList(cameras)
 <select id="availableCameras"></select>

about 4 years ago · Juan Pablo Isaza Report

0

Claramente al código le falta una línea. El código debería insertarse indefinido en una matriz y eso se agregaría a la selección.

 function updateCameraList(cameras) { const listElement = document.querySelector('select#availableCameras'); listElement.innerHTML = ''; cameras.map(camera => { const cameraOption = document.createElement('option'); cameraOption.label = camera.label; cameraOption.value = camera.deviceId; return cameraOption; }).forEach(cameraOption => listElement.add(cameraOption)); }

Ahora, ¿por qué tendríamos que hacer un bucle dos veces? Es una pérdida de tiempo. Así que solo haría un bucle una vez.

 function updateCameraList(cameras) { const listElement = document.querySelector('select#availableCameras'); listElement.innerHTML = ''; cameras.forEach(camera => { const cameraOption = document.createElement('option'); cameraOption.label = camera.label; cameraOption.value = camera.deviceId; listElement.add(cameraOption)); }); }
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!