¿Cómo puedo reemplazar el bucle for con la función .each?

    function addOptionsToSelect(placeElement, placeData){
      placeData.sort(comparePlaces);
      placeElement.empty();
      for(var i = 0; i < placeData.length; i++ ){
          var place = placeData[i];
          var option = $("<option>"+ place.name +"</option>").attr("value", place.code)
          placeElement.append(option);
      }
  }
-3
Michael Wang 7 jun. 2016 a las 17:42

4 respuestas

La mejor respuesta

En realidad, nadie lo publicó y la gente parece decidida a responder esta pregunta, así que para completar, aquí hay una versión que usa {{ X0}}:

function addOptionsToSelect(placeElement, placeData) {
    placeData.sort(comparePlaces);
    placeElement.empty();
    jQuery.each(placeData, function(_, place) { // Or $.each if $ == jQuery
        var option = $("<option>" + place.name + "</option>").attr("value", place.code)
        placeElement.append(option);
    });
}

Tenga en cuenta que el primer argumento es el índice de la entrada; la entrada en sí es el segundo argumento (y también this). Por lo tanto, function(_, place) donde no terminamos usando el argumento _ (_ es un identificador válido en JavaScript).

Pero usaría Array#forEach (en caso de necesidad) como sugirió Nina o cualquiera de las muchas otras formas de recorrer los arreglos.

0
2 revs 23 may. 2017 a las 10:34

Puede usar Array#forEach , un método ES5 nativo, para ello.

El método forEach() ejecuta una función proporcionada una vez por elemento de matriz.

function addOptionsToSelect(placeElement, placeData){
    placeData.sort(comparePlaces);
    placeElement.empty();
    placeData.forEach(function (place) {
        var option = $("<option>"+ place.name +"</option>").attr("value", place.code);
        placeElement.append(option);
    });
}
1
Nina Scholz 7 jun. 2016 a las 14:45

Una simple sintaxis foreach debería hacer el trabajo. La sintaxis de Javascript utiliza un simple " para " que incluye las claves de sus objetos:

function addOptionsToSelect(placeElement, placeData){
  placeData.sort(comparePlaces);
  placeElement.empty();

  for(var key in placeData)
  {
      place = placeData[key]
      var option = $("<option>"+ place.name +"</option>").attr("value", place.code)
      placeElement.append(option);
  }
}
0
hugodecasta 7 jun. 2016 a las 14:46

La manipulación del DOM es costosa, así que crea todo el conjunto de opciones y agrégalas de una vez

 function addOptionsToSelect(placeElement, placeData){
      placeData.sort(comparePlaces);
      placeElement.empty();
     var option ="";
     placeData.forEach(function(item){
     option+ = $("<option>"+ item.name +"</option>").attr("value", item.code)
      })
     placeElement.append(option);
}
1
brk 7 jun. 2016 a las 14:50