Recientemente, muchos socios pequeños que han completado la capacitación salen a buscar trabajo y les resulta difícil encontrar preguntas escritas en los exámenes. Hay una pregunta, mucha gente me pidió que la hiciera, ¿qué tipo de pregunta es? Vamos a ver
var str1 = "http://test.com?foo=active@987df&key=123&key=78";
var str2 = "http://test.com?too=last@4567&key=555&value=test";
función mostrar () {}, vamos a encapsular una función mostrar
print show(str1); //resultado devuelto {foo:'active',key:[123,78]}
Imprimir show (str2); // devuelve el resultado {también: 'último', clave: 555, valor: 'prueba'}
En primer lugar, cuando nos encontramos con este problema, debemos pensar en una serie de API de cadena de matriz, dividir la cadena en una matriz con "?", y luego mirar la siguiente parte y luego usar "&" para separar, porque los números en el resultado no pueden ser cadenas, también debemos convertir la cadena digital obtenida en un tipo de número.
En una palabra, tome la clave y el valor antes de "=" aquí como una matriz, y luego agréguelos uno por uno. Finalmente, si la longitud de la matriz es solo uno, use toString(), y si es un número, entonces Número
Aparte de todo lo demás, vamos al código.
función mostrar (cadena) {
let s = str.split('?')[1]; //Obtener foo=active@987df&key=123&key=78
// Separar s con &
let arr = s.split("&"); // obtener la matriz ['foo=active@987df', 'key=123', 'key=78']
// Declarar un objeto vacío para contener pares clave-valor
sea obj = {};
// Recorra arr, coloque cada elemento antes de '=' en el objeto como clave y luego colóquelo en la matriz
for (sea j = 0; j < arr.longitud; j++) {
let char = arr[j].split("=")[0];
let charV = arr[j].split("=")[1];
if (obj[char] == indefinido) {
// ensamblar con numeros
obj[carácter] = [];
//Juzgar si hay @ Este es el método de sellado inferior, usando el operador ternario
obj[char].push(juez(charV) ? charV.split("@")[0] : charV)
} demás {
obj[char].push(charV)
}
}
// Recorrer el objeto, si la longitud del valor es uno, convertirlo en una cadena en lugar de una matriz
para (deja k en obj) {
if (objeto[k].longitud == 1) {
//Determinar si la conversión a un número no es NaN
//similar a [555]
if (!isNaN(Número(obj[k][0]))) {
obj[k] = Número(obj[k].toString())
} demás {
obj[k] = obj[k].toString()
}
} demás {
for (sea j en obj[k]) {
if (!isNaN(Número(obj[k][j]))) {
obj[k][j] = Número(obj[k][j])
}
}
}
}
devolver objeto
}
//Método de encapsulación para determinar si la cadena tiene @
función juez(str) {
// Devuelve si hay un nuevo método de cadena @ES6 que incluye medios para incluir, agregar s puede entenderse como la tercera persona del singular
return str.includes("@");
}
consola.log(mostrar(str1));
consola.log(mostrar(str2));