Saltar al contenido

Alternativa a array.includes () en el script de aplicaciones de Google?

Si te encuentras con alguna parte que te causa duda puedes comentarlo y te responderemos lo más rápido posible.

Solución:

EDITAR (2019-04-07): Por favor tenga en cuenta. Con la actualización V8 esperada (ECMAScript 2017) para App Script, el lenguaje admitirá de forma nativa Array.prototype.includes y muchas otras características modernas de Javascript en un futuro próximo.


La solución más sencilla para array.prototype.includes es usar el siguiente polyfill de MDN en su proyecto de script de aplicaciones. Simplemente cree un archivo de script y pegue el siguiente código: el código/polyfill agregará la función directamente al objeto prototipo Array:

// https://tc39.github.io/ecma262/#sec-array.prototype.includes
if (!Array.prototype.includes) 
  Object.defineProperty(Array.prototype, 'includes', 
    value: function(searchElement, fromIndex)  0;

      // 5. If n ≥ 0, then
      //  a. Let k be n.
      // 6. Else n < 0,
      //  a. Let k be len + n.
      //  b. If k < 0, let k be 0.
      var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);

      function sameValueZero(x, y) 
        return x === y 

      // 7. Repeat, while k < len
      while (k < len) 
        // a. Let elementK be the result of ? Get(O, ! ToString(k)).
        // b. If SameValueZero(searchElement, elementK) is true, return true.
        if (sameValueZero(o[k], searchElement)) 
          return true;
        
        // c. Increase k by 1. 
        k++;
      

      // 8. Return false
      return false;
    
  );


Para array.prototype.flat el sitio MDN también ofrece soluciones alternativas. Uno de los cuales aprovecha array.prototype.reduce y array.prototype.concat:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat#Alternative

Reemplace la .includes() con .indexOf()+1 (se producirá 0 si el elemento no está presente, de lo contrario producirá un número entero entre 1 y la longitud de su array). Funciona en Google Script.

if(array.indexOf("val4")+1) doSomething;

Fue con if(array.indexOf("val4") > -1) doSomething; como se sugiere en los comentarios


Primero decidí ir con array.filtrar():

var test = array.filter(element => element == "val4");
if(test != null) doSomething;

Pero como se indica a continuación, las funciones de flecha no funcionan en Google Apps Script.


Pero mientras buscaba una respuesta encontré esto para resolver 1):

function flatten(arrayOfArrays)
  return [].concat.apply([], arrayOfArrays);

Definitivamente mejor de lo que hubiera sido capaz de pensar.

valoraciones y reseñas

Recuerda que puedes compartir esta división si te valió la pena.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *