Así que aquí hay un ejemplo:
{ "part": "Intro", "e": "------5/6------8\\6-|-------------------|-------------------", "B": "-----------9-------|---------6p8---(6)-|-------------------", "G": "--8----------------|---8h9-------------|--<8>--------------", "D": "", "A": "", "E": "", "endMsg": "Continue..." }Nota: La doble barra inclinada se convertirá en una sola barra inclinada solo al renderizar el texto.
Quiero obtener valor de este objeto que no está vacío. (Entonces eso podría ser de la tecla e o de la tecla B Siempre que no esté vacío).
Entonces estoy reemplazando ese valor usando esta expresión aquí:
str.replace(/[0-9-. a-zA-Z // \ ~ ( ) < >]/g, '-');
Es para reemplazar los números, letras y otros caracteres en guiones.
{ "part": "Intro", "e": "------5/6------8\\6-|-------------------|-------------------", "B": "-----------9-------|---------6p8---(6)-|-------------------", "G": "--8----------------|---8h9-------------|--<8>--------------", "D": "-------------------|-------------------|-------------------", "A": "-------------------|-------------------|-------------------", "E": "-------------------|-------------------|-------------------", "endMsg": "Continue..." }
No tengo idea de cómo lograr esto en el código. Por favor ayuda.
Puede recorrer cada par de valores clave y reemplazar el valor si está vacío. Tenga en cuenta que se utiliza una barra invertida para escapar de un carácter. Para solucionar esto, primero reemplazamos las barras invertidas con guiones y luego reemplazamos el resto.
La expresión regular también podría simplificarse a /[^-|]/g , lo que significa reemplazar todos los símbolos excepto - y |
const lines = { "part": "Intro", "e": "------5/6-----8\\6-|-------------------|-------------------", "B": "-----------9-------|---------6p8---(6)-|-------------------", "G": "--8----------------|---8h9-------------|--<8>--------------", "D": "", "A": "", "E": "", "endMsg": "Continue..." }; const createFullLines = (lines, blacklist = ['part', 'endMsg']) => { // Find a line that is not empty const line = Object.entries(lines).find(([key, line]) => { return !blacklist.includes(key) && line.trim(); }); // Exit if all lines are empty if(!line) return lines; // Destructure to get only value const [_, filledLine] = line; // Create new line with only dashes const newLine = filledLine.replace(/[^-|]/g, '-'); // Update lines for(const key in lines) { lines[key] ||= newLine; } return lines; } const result = createFullLines(lines); console.log(result);Simplemente debe iterar entre las claves de su objeto de esta manera:
// find first non-empty field, !! - conversion to boolean let nonEmptyKey = Object.keys(obj).find(key => !!obj[key]); for(let key of Object.keys(obj)) { // check if value is empty if(!obj[key]) { obj[key] = obj[nonEmptyKey].replace(/[0-9-. a-zA-Z // \ ~ ( ) < >]/g, '-'); } }Además, puede simplificar su expresión regular a esto:
// replace all symbols except - and | str.replace(/[^-|]/g, '-');