¿Hay alguna operación en Javascript como [x for x in array]
en python?
Por ejemplo, estoy usando javascript para leer un archivo json donde hay docenas de pares (clave, valor) que deben manejarse (o transformarse en otro formato). Y pensé que trabajar de esta manera es estúpido:
let transformed = [] for (let key in json){ transformed = [ /* doing some transform*/ ] }
¿Hay algo como:
let transformed = [ lambda function1(key), lambda function2(value) for key, value in json ]
Gracias por adelantado.
El equivalente aproximado de la comprensión de la lista de Python es Array.map
:
const myArray = [1, 2, 3] const transformed = myArray.map((item) => item + 1) // [2, 3, 4]
Pero su ejemplo no se trata de una matriz, sino de un Object
con claves y valores. En Python, esto sería un dict, y usaría una comprensión de dict en la línea de {function1(key): function2(value) for key, value in my_dict.items()}
.
En JavaScript, puede convertir un objeto de este tipo en una matriz con Object.entries
, luego ejecutar el map
y finalmente transformarlo nuevamente en un objeto usando Object.fromEntries
:
const myObject = { a: 1, b: 2 } const transformed = Object.fromEntries(Object.entries(myObject) .map(([key, value]) => [key + 'x', value + 1])) // { ax: 2, bx: 3 }
Tenga en cuenta que fromEntries
es bastante nuevo y es posible que deba agregar un polyfill para ello.
Puedes usar un código como este. Debe usar una función que maneje la operación en el elemento individual actual.
const words = ['hello', 'bird', 'table', 'football', 'pipe', 'code']; const capWords = words.forEach(capitalize); function capitalize(word, index, arr) { arr[index] = word[0].toUpperCase() + word.substring(1); } console.log(words); // Expected output: // ["Hello", "Bird", "Table", "Football", "Pipe", "Code"]
En primer lugar, javascript NO admite matrices asociativas. Si está acostumbrado a ellos en Python, PHP y otros lenguajes, necesita hacer una pequeña solución en JS para lograr la misma funcionalidad.
La forma más común de simular una matriz asociativa es mediante un objeto.
let testObject = {name: "Color", value: "Red"};
Y luego empuja cada objeto en una matriz para terminar con algo como esto:
let testArray = [{name: "Color", value: "Red"}, {name: "Color", value: "Blue"}];
Una vez que tenga esta matriz que consiste en objetos, puede usar la función de mapa para recorrer cada objeto en la matriz y hacer lo que quiera con él.
testArray.map((item, index) => { console.log("The value of "+index+". item is: "item.value); })