Tengo un array con algunos valores. ¿Cómo se puede buscar que la matriz de uso de jquery para un valor que es igual o cercano a él?

var a = ["foo","fool","cool","god"];

Si quiero buscar oo, entonces debe devolver foo, fool, y cool porque estas cadenas contienen oo.

InformationsquelleAutor KillerFish | 2011-03-16

7 Comentarios

  1. 42

    Actualizado

    A buscar en la matriz de Vainilla con js me gustaría utilizar el filter() método implementado en la Matriz prototipo

    Hacker estilo

    JS:

    let a = ["foo","fool","cool","god"];
    let b = a.filter(item => item.indexOf('oo') > -1);
    console.log(b); //["foo","fool","cool"]

    ES6 estilo (ES2015)

    JS:

    const fruits = ['apple', 'banana', 'grapes', 'mango', 'orange'];
    
    const filterItems = (needle, heystack) => {
      let query = needle.toLowerCase();
      return heystack.filter(item => item.toLowerCase().indexOf(query) >= 0);
    }
    
    console.log(filterItems('ap', fruits)); //['apple', 'grapes']
    console.log(filterItems('ang', fruits)); //['mango', 'orange']

    ES5 estilo

    JS:

    var fruits = ['apple', 'banana', 'grapes', 'mango', 'orange'];
    
    function filterItems(needle, heystack) {
      var query = needle.toLowerCase();
      return heystack.filter(function(item) {
          return item.toLowerCase().indexOf(query) >= 0;
      })
    }
    
    console.log(filterItems('ap', fruits)); //['apple', 'grapes']
    console.log(filterItems('ang', fruits)); //['mango', 'orange']

    Nota: Para matrices muy grandes que usted puede ser que desee considerar la refactorización de aquellos a async/await funciones


    Este es el anticuado respuesta

    Para buscar en el array con jQuery puede utilizar jQuery.grep() o
    jQuery.map(). Tanto el retorno de la nueva matriz con elementos filtrados mediante un
    función de devolución de llamada.

    La forma más rápida implementación (mayúsculas y minúsculas) es el uso de indexOf y
    toUpperCase en la devolución de llamada:

    var search_term = 'oo'; //your search term as string
    var search = search_term.toUpperCase();
    var array = jQuery.grep(a, function(value) {
        return value.toUpperCase().indexOf(search) >= 0;
    });

    Si usted no necesita las mayúsculas y minúsculas de búsqueda puede quitar .toUpperCase() a acelerar aún más.

    Más flexible, pero mucho más lento (lo suficientemente bueno para arreglos pequeños) es el uso de
    expresión regular:

    var search_term = "oo"; //search term
    var search = new RegExp(search_term , "i");
    var arr = jQuery.grep(a, function (value) {
        return search.test(value);
    });

    o

    var search_term = "oo"; //search term
    var search = new RegExp(search_term , "i");
    var arr = jQuery.map(a, function (value) {
        return value.match(search) ? value : null;
    });

    Expresiones regulares permiten hacer búsquedas mucho más complejo de lo que %value%. Sin embargo no lo use si usted no lo necesita porque es
    muchas veces más lento.

    usted debe obtener una matriz arr con la coincidencia de elementos

    • cómo pasar de la variable en lugar de «oo» en la búsqueda = /oo/gi; Es que, como search = /mi_var/gi; ?
    • debe utilizar search = new RegExp(my_var, "gi"); /oo/gi es un acceso directo de new RegExp("oo","gi");, pero ser conscientes de que $.grep y $.map no puede tener más parámetros, por lo que su my_var han de ser definidos en el ámbito global, que no es una buena práctica, pero no veo otra forma sencilla
    • Gracias por tu comentario 🙂 ya he encontrado esta solución dreamincode.net/forums/topic/… por cierto, gracias de nuevo y clasificados como Grandes Comentario
    • Gracias por la ayuda. Mantenerlo.
    • Querido dios, nunca uso «gi» para Regex. stackoverflow.com/questions/1520800/…
    • Buen punto, pero no troll, por favor

  2. 3
    function find(arr) {
        var result = [];
    
        for (var i in arr) {
            if (arr[i].match(/oo/)) {
                result.push(arr[i]);
            }
        }
    
        return result;
    }
    
    window.onload = function() {
        console.log(find(['foo', 'fool', 'cool', 'god']));
    };

    Imprime ["foo", "fool", "cool"]

  3. 2

    Tratar el siguiente código js

    function likeMatch(q)
    {
        my_arr = ["foo","fool","cool","god"];
        var rArr=[];
    
        for(var t in my_arr)
        {
          if(my_arr[t].indexOf(q)>0)   
          rArr.push(my_arr[t]);
        }
      return(rArr);
    }
  4. 1

    intente esto:

    var infoData = ["foo","fool","cool","god"], 
    search   = 'oo';
    
    //this makes the magic
    infoData = $$(infoData).filter(function(){
            return (this.search(search) >= 0)
        })  
    
    var n = infoData.length;
        console.log("size result: "+ n );
    
    for(var item = 0; item < n ;item++){
        console.log("item: "+item+" data : "+infoData[item]);       
    }

    resultado:

    size result: 3
    
    item: 0 data : foo
    item: 1 data : fool
    item: 2 data : cool 
  5. 0

    Usted puede hacerlo con Alasql JavaScript SQL de la biblioteca.
    Se admite COMO operador, como en SQL

    var a = ["foo","fool","cool","god"];
    var searchString = "%oo%";
    
    var res = alasql('SELECT COLUMN * FROM [?] WHERE [0] LIKE ?',[a, searchString]);

    Intentar este ejemplo en jfFiddle.

    • El jsFiddle en el ejemplo de uso de una obsoleta de la biblioteca. Por favor, este es actualizada: jsfiddle.net/0xs2nxxp/41
  6. 0

    utilizar la siguiente función si usted está buscando en la matriz que contiene los hash objeto

     function searchInArrayofHashes(array,key,keyword) {
      responsearr = []
      for(i=0;i<array.length;i++) {
          if(array[i][key].indexOf(keyword) > -1 ) {
            responsearr.push(array[i])
        }
      }
      return responsearr
    }

Dejar respuesta

Please enter your comment!
Please enter your name here