Estoy tratando de buscar en una matriz elementos similares. Por ejemplo, si en mi matriz tengo los elementos de nombre como Sarah, sara, sarah y en el campo de entrada escribo y busco sara, el resultado debería darme todos los resultados similares.

Aquí está el fiddle, sin embargo, solo busca el elemento correcto y no distingue entre mayúsculas y minúsculas.

¿Cómo puede abordar esto para tener una búsqueda que no distinga entre mayúsculas y minúsculas y que le guste la búsqueda sql LIKE %...%;

Hasta ahora tengo

$("#SearchBtn").click(function() {

  var searchInput = $("#SearchInput").val();

  if (searchInput == "") {

    alert("Search field is empty");

  } else {

    for (var i = 0; i < array.length; i++) {

      if ((array[i][0] == searchInput) || (array[i][1] == searchInput) || (array[i][2] == searchInput) || (array[i][3] == searchInput) || (array[i][4] == searchInput)) {

        alert(array[i]);

      }

    }

  }

});
-1
SNos 11 may. 2016 a las 14:00

6 respuestas

La mejor respuesta

Para la parte que no distingue entre mayúsculas y minúsculas, puede usar toLowerCase tanto en la cadena de entrada como en la cadena de búsqueda.

Después de eso, puede usar indexOf para encontrar si la cadena de entrada es "similar" a su patrón de búsqueda.

Sin embargo, la similitud entre cadenas podría ser un poco más complicada. Por ejemplo, podría considerar que "sora" es similar a "sara" mientras que "sarasara" no ...

En ese caso, necesitaría Distancia de Hamming o funciones de distancia similares y un umbral de similitud.

Además, toLowerCase podría no funcionar con respecto a la globalización, y debería considerar toLocalLowerCase.

Eche un vistazo a la versión simple en este violín:

var array = [
  ["Andrew", "London", "Male", "waiter", "single"],
  ["John", "rome", "Male", "designer", "Married"],
  ["Sarah", "new York", "Female", "broker", "single"],
  ["Annah", "UK", "Female", "waiter", "maRRied"],
  ["sara", "Tokio", "Female", "Waiter", "single"],
  ["John", "Naples", "male", "Chef", "married"]
];

//Search Box

$("#SearchBtn").click(function() {

  var searchInput = $("#SearchInput").val().toLowerCase();

  if (searchInput == "") {

    alert("Search field is empty");

  } else {

    for (var i = 0; i < array.length; i++) {
      if ((array[i][0].toLowerCase().indexOf(searchInput) >= 0) 
      ||(array[i][1].toLowerCase().indexOf(searchInput) >= 0)
      ||(array[i][2].toLowerCase().indexOf(searchInput) >= 0)
      ||(array[i][3].toLowerCase().indexOf(searchInput) >= 0)
      ||(array[i][4].toLowerCase().indexOf(searchInput) >= 0)) {

				alert (array[i]);

      } 

    }

  }

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="custom-search-form" class="form form-inline navbar-form ">
  <div class="input-group">

    <input id="SearchInput" type="text" name="mapSearch" value="" placeholder="Key Search" class="form-control">
    <span class="input-group-btn">
                    <button id="SearchBtn" type="button" class="btn btn-info" style="height:25px;">Search</button>
                </span>

  </div>
3
Regis Portalez 11 may. 2016 a las 11:13

Puede verificar aquí: https://jsfiddle.net/u7gkt2Lc/

var array = [
  ["Andrew", "London", "Male", "waiter", "single"],
  ["John", "rome", "Male", "designer", "Married"],
  ["Sarah", "new York", "Female", "broker", "single"],
  ["Annah", "UK", "Female", "waiter", "maRRied"],
  ["sara", "Tokio", "Female", "Waiter", "single"],
  ["John", "Naples", "male", "Chef", "married"]
];

//Search Box

$("#SearchBtn").click(function() {

  var searchInput = $("#SearchInput").val();

  if (searchInput == "") {

    alert("Search field is empty");

  } else {



    for (var i = 0; i < array.length; i++) {

      for(var j = 0; j <= 4 ; j++ ) {
      if (array[i][j].toLowerCase().indexOf(searchInput.toLowerCase()) >= 0) {
        alert (array[i][j]);
      }
      }

    }

  }

});
0
Jayesh Chitroda 11 may. 2016 a las 11:11

Como se indicó anteriormente, puede usar la función toLowerCase () para poner todo en minúsculas. Asegúrese de que tanto los elementos en la matriz como el input.val () en minúsculas.

Cuando haya hecho eso, simplemente puede usar la función indexOf, que busca a través de una matriz y devuelve el índice.

Entonces sabemos que si el índice es mayor que -1 (ya que 0 es el primer índice), entonces debe haber una coincidencia.

Puedes usar algo similar a esto:

   if(array[i][0].indexOf(searchInput) > -1) {
        alert('There's a match!')
   }

Espero que eso ayude.

0
Rasmus R 11 may. 2016 a las 11:11

El método de búsqueda ejecuta una búsqueda de una coincidencia entre una expresión regular y este objeto String. Utilice el siguiente RegExp sin distinción entre mayúsculas y minúsculas para comparar:

var oRegExp = new RegExp(/John/i);
var sArrayElement = "john"
sArrayElement.search(oRegExp);
0
Dopedev 11 may. 2016 a las 11:19

Puede usar .toLowerCase () para comparar mayúsculas y minúsculas

var array = [
   ["Andrew", "London", "Male", "waiter", "single"],
   ["John", "rome", "Male", "designer", "Married"],
   ["Sarah", "new York", "Female", "broker", "single"],
   ["Annah", "UK", "Female", "waiter", "maRRied"],
   ["sara", "Tokio", "Female", "Waiter", "single"],
   ["John", "Naples", "male", "Chef", "married"]
];
//Search Box
$("#SearchBtn").click(function() {
   var searchInput = $("#SearchInput").val();
   if (searchInput == "") {
      alert("Search field is empty");
   } 
	else {
      array.map(function(d) {
         d.map(function(e) {
            if (searchInput.toLowerCase() == e.toLowerCase()) {
               alert(e);
            }
         })
      })
   }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="custom-search-form" class="form form-inline navbar-form ">
   <div class="input-group">

      <input id="SearchInput" type="text" name="mapSearch" value="" placeholder="Key Search" class="form-control">
      <span class="input-group-btn">
                    <button id="SearchBtn" type="button" class="btn btn-info" style="height:25px;">Search</button>
                </span>

   </div>
0
ozil 11 may. 2016 a las 11:15

Use toLowerCase () aquí

if ((array[i][0] == searchInput)

1
Sapotero 11 may. 2016 a las 11:03