Me gustaría que esto devuelva s1 y s1 combinados, solo los caracteres únicos ordenados en una nueva cadena llamada sortedString. En cambio, obtengo una salida de cadena vacía.

Ex entrada y salida:

a = "xyaabbbccccdefww"
b = "xxxxyyyyabklmopq"
longest(a, b) -> "abcdefklmopqwxy"  

function longest(s1, s2) {
  var sortedString = '';
  var a = s1.split();
  var b = s2.split();
  for (i=0; i < a.length; i++) {
    if (!sortedString.includes(a[i])) {
      sortedString.concat(a[i]);
      }
  }
  for (j=0; j < b.length; j++) {
    if (!sortedString.includes(b[j])) {
      sortedString.concat(b[j]);
      }
  }
  return sortedString.sort();
}
-1
Alex 14 ene. 2017 a las 19:52

4 respuestas

La mejor respuesta

En javascript, el tipo de cadena es inmutable y el método concat no muta la entrada, por lo que cuando escribe:

  sortedString.concat(b[j]);

SortedString nunca se silencia. Deberías hacer esto en su lugar:

sortedString = sortedString.concat(b[j]);

0
Léo Sauvaget 14 ene. 2017 a las 17:01

Debe pasar una cadena vacía a split si desea separar la cadena en una lista de caracteres.

Sin embargo, le recomiendo encarecidamente que resuelva esto declarativamente:

const allChars = s1.split('').concat(s2.split(''));
return allChars
  .filter((char) => allChars.indexOf(char) === allChars.lastIndexOf(char))
  .sort()
  .join('');
0
user5224313user5224313 14 ene. 2017 a las 17:00

Con ES6, puede usar Set con sintaxis extendida ... para dividir la cadena y completar una matriz.

var a = "xyaabbbccccdefww",
    b = "xxxxyyyyabklmopq",
    result = [...new Set([...(a + b)])].sort().join("");

console.log(result);
0
Nina Scholz 14 ene. 2017 a las 17:21
var a = "xyaabbbccccdefww";
var b = "xxxxyyyyabklmopq";
var mySet = new Set(a.split("").concat(b.split("")));
var result = Array.from(mySet).sort().join("");
console.log(result);
0
Vladu Ionut 14 ene. 2017 a las 17:09