aplicación.js
let ids = [1, 2, 3]; let obj = {}; for (let i in ids) { obj = { ...obj, ids[i]: "" }; } console.log(obj);Al ejecutar el código anterior, aparece el siguiente error.
Parsing error: Unexpected token, expected "," 4 | 5 | for (let i in ids) { > 6 | obj = { ...obj, ids[i]: "" }; | ^ 7 | } 8 | 9 | console.log(obj);eslint Recibo este error cuando paso el mouse sobre la línea obj = { ...obj, ids[i]: "" }; en mi código VS.
Cuando ejecuto el código usando el nodo, es decir, en el node app.js Me sale el siguiente error en mi terminal:
obj = { ...obj, ids[i]: "" }; ^ SyntaxError: Unexpected token '[' at wrapSafe (internal/modules/cjs/loader.js:988:16) at Module._compile (internal/modules/cjs/loader.js:1036:27) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10) at Module.load (internal/modules/cjs/loader.js:937:32) at Function.Module._load (internal/modules/cjs/loader.js:778:12) at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12) at internal/main/run_main_module.js:17:47 ¿Qué estoy haciendo mal? Espero que el valor de obj al final sea {1 : "", 2 : "", 3: ""}
Hay varias soluciones.
for (let i in ids) { obj = { ...obj, [ids[i]]: "" }; // Brackets make it act as a key name instead of something else } for (let i in ids) { obj[ids[i]] = ""; // This adds a value }Use [ids[i]] en lugar de ids[i] .
let ids = [1, 2, 3]; let obj = {}; for (let i in ids) { obj = { ...obj, [ids[i]]: "" }; } console.log(obj);is[i] es la key que debe resolverse en tiempo de ejecución, por lo que debe hacer que se computed property names
A partir de ECMAScript 2015, la sintaxis del inicializador de objetos también admite nombres de propiedades calculadas. Eso le permite poner una expresión entre corchetes [], que se calculará y usará como el nombre de la propiedad. Esto recuerda a la notación entre paréntesis de la sintaxis del descriptor de acceso a la propiedad, que es posible que ya haya utilizado para leer y establecer propiedades. - MDN
let ids = [1, 2, 3]; let obj = {}; for (let i in ids) { obj = { ...obj, [ids[i]]: "" }; } console.log(obj);