Por ejemplo, Hello World!
y Hi World!
- la primera aparición de la diferencia es en el segundo carácter. ¿Cuál sería la función JavaScript/jQuery?¿Cómo averiguar la posición de la primera aparición de la diferencia entre las dos cuerdas?
Respuesta
function strDiff(first, second) {
if(first==second)
return -1;
first = first.toString();
second = second.toString();
var minLen = min(first.length,second.length);
for(var i = 0; i<minLen; i++) {
if(first.charAt(i) != second.charAt(i)) {
return i;
}
}
return minLen;
}
Devuelve -1 si las cadenas no difieren, o el índice (comenzando en 0) de carácter en el que lo hacen (esta es la longitud de la cadena más corta si sólo difieren por ser diferentes longitudes, ej. 'abcd' y 'abcdef' devolverían 4.
Tal vez algo así? Devuelve, en ese orden, la posición de la primera diferencia si hay alguna, la longitud de la cadena más corta si esas son diferentes, o -1 si todo es igual.
function findDiff(a, b) {
a = a.toString();
b = b.toString();
for (var i = 0; i < Math.min(a.length, b.length); i++) {
if (a.charAt(i) !== b.charAt(i)) { return i; }
}
if (a.length !== b.length) { return Math.min(a.length, b.length); }
return -1;
}
¡Gracias Phil por las sugerencias!
Suponiendo, como otras respuestas, que las cadenas que emparejan vuelven -1
:
// Find common prefix of strings a and b.
var prefix = function(a,b){
return a && a[0] === b[0] ? a[0] + prefix(a.slice(1), b.slice(1)) : '';
};
// Find index of first difference.
var diff = function(a,b){
return a===b ? -1 : prefix(a,b).length;
};
var tests = [
['Hello World!', 'Hi World!'],
['aaabab', 'aaabzbzz'],
['', ''],
['abc', 'abc'],
['qrs', 'tu'],
['abc', ''],
['', 'abc']
];
console.log('diff', tests.map(test => diff(test[0], test[1])));
// Or just count up to the first difference
// Trickier nested ternary to handle the -1 however.
var diff2 = function(a,b){
return a === b ? -1 : a[0] === b[0] ? 1 + diff2(a.slice(1), b.slice(1)) : 0;
};
console.log('diff2', tests.map(test => diff2(test[0], test[1])));
function firstDiff(a, b) {
var i = 0;
while (a.charAt(i) === b.charAt(i))
if (a.charAt(i++) === '')
return -1;
return i;
}
devuelve la posición donde las dos cadenas A y B primero difieren o -1 si están igual.
Una más eficiente, pero menos legible versión:
function firstDiff(a, b) {
for (var i = 0, c; (c = a.charAt(i)) === b.charAt(i); ++i)
if (c === '')
return -1;
return i;
}
Si considera que primero debe stringify los argumentos, y luego hacerlo en la invocación:
firstDiff(toString(a), toString(b))
mayoría de las veces que será una pérdida de tiempo. ¡Conoce tus datos!
- 1. Encontrar la posición de la diferencia entre dos cadenas
- 2. División en la primera aparición
- 3. Cómo encontrar la primera aparición con LINQ
- 4. Encuentra la posición de la primera aparición de cualquier número en cadena (php)
- 5. Cómo reemplazar la primera aparición de cadena en Java
- 6. ¿Cómo encontrar la diferencia entre dos cadenas?
- 7. encontrar la primera aparición de la clase en div
- 8. SQL: devolver sólo la primera aparición
- 9. ¿Cómo obtener la primera aparición de un caracter en Subcadena
- 10. ¿Reemplazar la primera aparición solamente de una cadena?
- 11. Obteniendo la diferencia entre dos repositorios
- 12. XSLT Obtiene la primera aparición de una etiqueta específica
- 13. Reemplazar la primera aparición de cadena en Python
- 14. ¿Se elimina la primera aparición de palabra de una cadena?
- 15. calcular la diferencia entre dos fechas
- 16. Regex: coincidiendo con la primera aparición de un personaje
- 17. Leyenda de posición en la primera gráfica de la faceta
- 18. UIPinchGestureRecognizer posición de la vista pellizcada entre los dos dedos
- 19. ¿La diferencia más pequeña entre dos ángulos?
- 20. ¿Cuál es la diferencia entre esos dos?
- 21. encontrar la diferencia entre dos diccionarios
- 22. Diferencia entre dos instancias de la misma clase
- 23. Regex a primera aparición solamente?
- 24. ¿Posición entre dos puntos?
- 25. ¿Cómo obtengo la diferencia entre dos fechas en JavaScript?
- 26. Cómo reemplazar todo PERO la primera aparición de un patrón en la cadena
- 27. ¿Cómo puedo encontrar la primera y la última aparición de un elemento en un data.frame?
- 28. Cómo obtener la diferencia horaria entre dos valores
- 29. Selección de todas las filas hasta la primera aparición de valor dado
- 30. El cálculo de la diferencia porcentual entre dos valores
Si difieren en el primer carácter, obtendrás 0, pero también si las cadenas coinciden completamente, obtendrás 0. Volvería -1 si coinciden. Además, si b es más corto que a, iterarás más allá del final de b, lo cual es innecesario e imprudente, tal vez iterar hasta el mínimo de las dos longitudes. –
@ Phil muy buenos puntos. Escribí la respuesta sobre mi cabeza, y claramente tiene algunas deficiencias. Lo editaré en consecuencia. – Aleadam