recorrer objetos objeto metodos lista funciones eliminar elemento crear array agregar javascript jquery object syntax

metodos - recorrer array de objetos javascript



¿Agregar una propiedad a un objeto de JavaScript usando una variable como nombre? (10)

Estoy extrayendo elementos del DOM con jQuery y quiero establecer una propiedad en un objeto utilizando el id del elemento DOM.

Ejemplo

const obj = {} jQuery(itemsFromDom).each(function() { const element = jQuery(this) const name = element.attr(''id'') const value = element.attr(''value'') // Here is the problem obj.name = value })

Si itemsFromDom incluye un elemento con un id de "myId", quiero que obj tenga una propiedad llamada "myId". Lo de arriba me da name .

¿Cómo nombro una propiedad de un objeto usando una variable usando JavaScript?


Basado en la respuesta de wOxxOm , este es un ejemplo de uso:

const data = [ {"id": "z1", "val":10}, {"id": "z2", "val":20}, {"id": "z3", "val":30} ]; const obj = Object.assign.apply({}, data.map((el, i) => ({[el.id]: el.val}))); console.log(obj);


Con ECMAScript 2015 puede hacerlo directamente en la declaración de objetos utilizando la notación de corchetes:

var obj = { [key]: value }

Donde key puede ser cualquier tipo de expresión (por ejemplo, una variable) que devuelve un valor:

var obj = { [''hello'']: ''World'', [x + 2]: 42, [someObject.getId()]: someVar }



Con lodash, puedes crear un nuevo objeto como este _.set :

obj = _.set({}, key, val);

O puede establecer un objeto existente como este:

var existingObj = { a: 1 }; _.set(existingObj, ''a'', 5); // existingObj will be: { a: 5 }

Debería tener cuidado si desea usar un punto (".") En su ruta, porque lodash puede establecer una jerarquía, por ejemplo:

_.set({}, "a.b.c", "d"); // { "a": { "b": { "c": "d" } } }


Hay dos notaciones diferentes para acceder a las propiedades de los objetos.

  • Notación de puntos : myObj.prop1
  • Notación del corchete : myObj ["prop1"]

La notación de puntos es rápida y fácil, pero debe usar el nombre de la propiedad real explícitamente. Sin sustitución, variables, etc.

La notación de corchete está abierta. Utiliza una cadena pero puede producir la cadena usando cualquier código js legal. Puede especificar la cadena como literal (aunque en este caso la notación de puntos sería más fácil) o usar una variable o calcular de alguna manera.

Entonces, todos estos configuran la propiedad myObj llamada prop1 al valor Hola :

// quick easy-on-the-eye dot notation myObj.prop1 = "Hello"; // brackets+literal myObj["prop1"] = "Hello"; // using a variable var x = "prop1"; myObj[x] = "Hello"; // calculate the accessor string in some weird way var numList = [0,1,2]; myObj[ "prop" + numList[1] ] = "Hello";

Escollos:

myObj.[xxxx] = "Hello"; // wrong: mixed notations, syntax fail myObj[prop1] = "Hello"; // wrong: this expects a variable called prop1

tl; dnr : si desea calcular o hacer referencia a la clave, debe usar la notación de corchete . Si está usando la clave explícitamente, entonces use la notación de puntos para un simple código simple.

Nota: hay algunas otras respuestas buenas y correctas, pero personalmente las encontré un poco breves debido a una baja familiaridad con la peculiaridad de JS sobre la marcha. Esto podría ser útil para algunas personas.


Incluso puedes hacer una lista de objetos como este.

var feeTypeList = []; $(''#feeTypeTable > tbody > tr'').each(function (i, el) { var feeType = {}; var $ID = $(this).find("input[id^=txtFeeType]").attr(''id''); feeType["feeTypeID"] = $(''#ddlTerm'').val(); feeType["feeTypeName"] = $(''#ddlProgram'').val(); feeType["feeTypeDescription"] = $(''#ddlBatch'').val(); feeTypeList.push(feeType); });


Primero debemos definir la clave como variable y luego debemos asignar la clave como objeto. Por ejemplo

var data = {key:''dynamic_key'',value:''dynamic_value''} var key = data.key; var obj = { [key]: data.value} console.log(obj)


Puedes usar esta sintaxis equivalente:

obj[name] = value


Si desea agregar campos a un objeto dinámicamente, la forma más sencilla de hacerlo es la siguiente:

var params= [ {key: "k1", value=1}, {key: "k2", value=2}, {key: "k3", value=3}]; for(i=0; i< params.len; i++) { data[params[i].key] = params[i].value }

Esto creará un objeto de datos que tiene los siguientes campos:

{k1:1, k2:2, k3:3}


objectname.newProperty = value;