recorrer objetos objeto metodos lista eliminar elemento crear buscar array agregar javascript object

metodos - recorrer array de objetos javascript



¿Cómo creo una clave dinámica para agregar a una variable de objeto JavaScript (2)

Esta pregunta ya tiene una respuesta aquí:

Estoy intentando algo como esto, pero este ejemplo no funciona.

jsObj = {}; for (var i = 1; i <= 10; i++) { jsObj{''key'' + i} = ''example '' + 1; }

¿Qué puedo hacer para crear una clave dinámica como esta?


Corchetes:

jsObj[''key'' + i] = ''example'' + 1;

En JavaScript, todas las matrices son objetos, pero no todos los objetos son matrices. La principal diferencia (y una que es bastante difícil de imitar con JavaScript directo y objetos simples) es que las instancias de matriz mantienen la propiedad de length para que refleje el valor numérico de la propiedad cuyo nombre es numérico y cuyo valor, cuando se convierte en un número, es la más grande de todas esas propiedades. Eso suena realmente raro, pero solo significa que, dada una instancia de matriz, las propiedades con nombres como "0" , "5" , "207" , etc., se tratan especialmente porque su existencia determina el valor de la length . Y, además de eso, el valor de la length se puede establecer para eliminar dichas propiedades. Al establecer la length de una matriz en 0 eliminan todas las propiedades cuyos nombres se parecen a números enteros.

OK, entonces eso es lo que hace que una matriz sea especial. Todo eso, sin embargo, no tiene nada que ver con la forma en que funciona el operador JavaScript [ ] . Ese operador es un mecanismo de acceso a la propiedad del objeto que funciona en cualquier objeto. Es importante tener en cuenta que los nombres de las propiedades de la matriz numérica no son especiales en lo que respecta al acceso simple a la propiedad. Son solo cadenas que se parecen a números, pero los nombres de propiedades de objetos JavaScript pueden ser cualquier tipo de cadena que te guste.

Por lo tanto, la forma en que el operador [ ] trabaja en un bucle for iterando a través de una matriz:

for (var i = 0; i < myArray.length; ++i) { var value = myArray[i]; // property access // ... }

realmente no es diferente de la forma en que [ ] funciona cuando se accede a una propiedad cuyo nombre es una cadena calculada:

var value = jsObj["key" + i];

El operador [ ] está haciendo exactamente lo mismo en ambos casos. El hecho de que en un caso el objeto involucrado sea una matriz no es importante, en otras palabras.

Al establecer valores de propiedad usando [ ] , la historia es la misma excepto por el comportamiento especial en torno al mantenimiento de la propiedad de length . Si establece una propiedad con una clave numérica en una instancia de matriz:

myArray[200] = 5;

luego (suponiendo que "200" es el nombre de propiedad numérico más grande) la propiedad de length se actualizará a 201 como un efecto secundario de la asignación de propiedad. Si lo mismo se hace con un objeto simple, sin embargo:

myObj[200] = 5;

no hay tal efecto secundario. La propiedad llamada "200" de la matriz y el objeto se establecerá en el valor 5 de lo contrario de la misma manera.

Uno podría pensar que debido a que ese comportamiento de length es útil, también podría hacer que todas las instancias de objetos del constructor Array en lugar de objetos simples. No hay nada directamente malo en eso (aunque puede ser confuso, especialmente para las personas que están familiarizadas con otros idiomas, que algunas propiedades se incluyan en la length pero no en otras). Sin embargo, si está trabajando con la serialización JSON (una cosa bastante común), comprenda que las instancias de matriz se serializan a JSON de una manera que solo involucre las propiedades con nombre numérico. Otras propiedades agregadas a la matriz nunca aparecerán en el formulario JSON serializado. Así por ejemplo:

var obj = []; obj[0] = "hello world"; obj["something"] = 5000; var objJSON = JSON.stringify(obj);

el valor de "objJSON" será una cadena que contenga solo ["hello world"] ; la propiedad "algo" se perderá.

ES2015:

Si puede usar las características JavaScript de ES6, puede usar los nombres de propiedad calculados para manejar esto muy fácilmente:

var key = ''DYNAMIC_KEY'', obj = { [key]: ''ES6!'' }; console.log(obj); // > { ''DYNAMIC_KEY'': ''ES6!'' }


Las matrices asociativas en JavaScript realmente no funcionan igual que en otros idiomas. for each enunciado son complicados (porque enumeran las propiedades del prototipo heredado). Puede declarar propiedades en un objeto / matriz asociativa como mencionó Pointy, pero realmente para este tipo de cosas debe usar una matriz con el método push :

jsArr = []; for (var i = 1; i <= 10; i++) { jsArr.push(''example '' + 1); }

Simplemente no olvide que las matrices indexadas están basadas en cero, por lo que el primer elemento será jsArr [0], no jsArr [1].