2010-06-19 11 views

Respuesta

9
function find(key, array) { 
    // The variable results needs var in this case (without 'var' a global variable is created) 
    var results = []; 
    for (var i = 0; i < array.length; i++) { 
    if (array[i].indexOf(key) == 0) { 
     results.push(array[i]); 
    } 
    } 
    return results; 
} 
+1

FYI, el método indexOf falla en IE8; Estaba a punto de usar esto también :((Sí, tengo que admitir IE más antiguo y desearía no haberlo hecho) – mkralla11

15

Use indexOf como @Annie suggested. indexOf se usa para encontrar subcadenas dentro de una cadena dada. Si no hay coincidencia, devuelve -1, de lo contrario, devuelve el índice inicial de la primera coincidencia. Si ese índice es 0, significa que la coincidencia fue al principio.

Otra forma es usar regular expressions. Use el carácter ^ para hacer coincidir desde el comienzo de la cadena. La expresión regular:

/^he/

coincidirá con todas las cadenas que comienzan con "he", tales como "hola", "escuchar", "helio", etc. El método test la expresión-regular devuelve un valor booleano que indica si no hubo una pareja exitosa. La expresión regular anterior se puede probar como /^he/.test("helix"), que devolverá verdadero, mientras que /^he/.test("sheet") no aparecerá como "he" al principio.

Circule por cada cadena en la matriz de entrada, y recopile todas las cadenas que coincidan (utilizando indexOf o una expresión regular) en una nueva matriz. Esa nueva matriz debe contener lo que quieres.

1

Con las mejoras , puede encontrar si contiene, no solo como primera char, y tiene un tercer parámetro para definir el valor devuelto: true significa devolver solo el número de elemento dentro de la matriz (índice/clave), falso o cualquier cosa no aceptada o ningún valor significa devolver la matriz completa [elemento], y si se establece en 'posición = 3', devuelve los valores de la matriz que contiene la cadena exactamente en la posición 'después = número', ¡aquí 3!


function find(key, array, returnindex) 
{ 
var results = []; 
if {returnindex.indexOf('position=') == 0} 
{ 
    var a = parseInt(returnindex.replace('position=','')); 
    returnindex = false; 
} 
else if (returnindex != true) 
{ 
    returnindex = false; 
} 
for (var i = 0; i < array.length; i++) 
{ 
    var j = '-'+array[i].indexOf(key); 
    if (typeof a == 'undefined') 
    { 
     if (i > 0) 
     { 
      j = 'ok'; 
     } 
    } 
    else 
    { 
     if (i == a+1) 
     { 
      j = 'ok'; 
     } 
    } 
    if (j == 'ok' && returnindex) 
    { 
     results.push(i); 
    } 
    else 
    { 
     results.push(array[i]); 
    } 
} 
return results; 
} 
-1

Puede utilizar filtros con expresiones regulares para lograr esto:

function startsWith(array, key) { 
 
    const matcher = new RegExp(`^${key}`, 'g'); 
 
    return array.filter(word => word.match(matcher)); 
 
} 
 

 
const words = ['apple','ape','open','soap'] 
 

 
const key = 'ap' 
 

 
const result = startsWith(words, key)

Cuestiones relacionadas