Equivalente angular de jQuery $.mapa?


Estoy haciendo la transición de confiar en jQuery a crear aplicaciones en AngularJS. Se recomienda en un número de lugares a no mezclar jQuery y código Angular.

Una cosa que echo de menos es el jQuery $.función de mapa para matrices. Sé que esto podría ser reescrito usando la función nativa de mapa Javascript , pero esto no está implementado en todos los navegadores (en particular, IE

Entonces, ¿hay un equivalente angular, o debería volver a escribir for (var x = 0; x < foo; x += 1) {...} para poder parar incluyendo jQuery?

ACTUALIZAR A veces saber qué buscar es todo lo que necesita. Bergie dice "busca polyfills". Aquí hay una guía de referencia (del equipo de Modernizr) para un montón de recursos para hacer que el código moderno funcione en navegadores más antiguos: HTML5 Cross Browser Polyfills

Author: Community, 2013-03-14

2 answers

Marque aquí: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/map

Mozilla ha suministrado una matriz.map polyfill para navegadores no compatibles

if (!Array.prototype.map) {
  Array.prototype.map = function(callback, thisArg) {

    var T, A, k;

    if (this == null) {
      throw new TypeError(" this is null or not defined");
    }

    // 1. Let O be the result of calling ToObject passing the |this| value as the argument.
    var O = Object(this);

    // 2. Let lenValue be the result of calling the Get internal method of O with the argument "length".
    // 3. Let len be ToUint32(lenValue).
    var len = O.length >>> 0;

    // 4. If IsCallable(callback) is false, throw a TypeError exception.
    // See: http://es5.github.com/#x9.11
    if (typeof callback !== "function") {
      throw new TypeError(callback + " is not a function");
    }

    // 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
    if (thisArg) {
      T = thisArg;
    }

    // 6. Let A be a new array created as if by the expression new Array(len) where Array is
    // the standard built-in constructor with that name and len is the value of len.
    A = new Array(len);

    // 7. Let k be 0
    k = 0;

    // 8. Repeat, while k < len
    while(k < len) {

      var kValue, mappedValue;

      // a. Let Pk be ToString(k).
      //   This is implicit for LHS operands of the in operator
      // b. Let kPresent be the result of calling the HasProperty internal method of O with argument Pk.
      //   This step can be combined with c
      // c. If kPresent is true, then
      if (k in O) {

        // i. Let kValue be the result of calling the Get internal method of O with argument Pk.
        kValue = O[ k ];

        // ii. Let mappedValue be the result of calling the Call internal method of callback
        // with T as the this value and argument list containing kValue, k, and O.
        mappedValue = callback.call(T, kValue, k, O);

        // iii. Call the DefineOwnProperty internal method of A with arguments
        // Pk, Property Descriptor {Value: mappedValue, : true, Enumerable: true, Configurable: true},
        // and false.

        // In browsers that support Object.defineProperty, use the following:
        // Object.defineProperty(A, Pk, { value: mappedValue, writable: true, enumerable: true, configurable: true });

        // For best browser support, use the following:
        A[ k ] = mappedValue;
      }
      // d. Increase k by 1.
      k++;
    }

    // 9. return A
    return A;
  };      
}
 26
Author: Rob M.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-15 16:59:57

No, no hay equivalente en Angular. Y como descubrió, no, no necesita volver a escribir código imperativo.

En su lugar, simplemente use la función map que está integrada directamente en JavaScript. Si necesita soportar IE8, inserte el polyfill al principio de sus scripts.

 13
Author: Edward Brey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-12 21:52:41