Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用变量作为名称向JavaScript对象添加属性?_Javascript_Jquery_Object_Syntax - Fatal编程技术网

使用变量作为名称向JavaScript对象添加属性?

使用变量作为名称向JavaScript对象添加属性?,javascript,jquery,object,syntax,Javascript,Jquery,Object,Syntax,我使用jQuery从DOM中提取项,并希望使用DOM元素的id在对象上设置属性 例子 const obj={} jQuery(itemsFromDom).each(function(){ 常量元素=jQuery(this) const name=element.attr('id') 常量值=元素.attr('value') //问题就在这里 obj.name=值 }) 如果itemsFromDom包含一个id为“myId”的元素,我希望obj具有一个名为“myId”的属性。上面给出了我的名字

我使用jQuery从DOM中提取项,并希望使用DOM元素的
id
在对象上设置属性

例子
const obj={}
jQuery(itemsFromDom).each(function(){
常量元素=jQuery(this)
const name=element.attr('id')
常量值=元素.attr('value')
//问题就在这里
obj.name=值
})
如果
itemsFromDom
包含一个
id
为“myId”的元素,我希望
obj
具有一个名为“myId”的属性。上面给出了我的名字


如何使用JavaScript使用变量命名对象的属性?

您可以使用以下等效语法:

obj[name] = value
示例

let obj = {};
obj["the_key"] = "the_value";
或具有ES6功能:

let key = "the_key";
let obj = {
  [key]: "the_value",
};

在这两个示例中,
console.log(obj)
将返回:
{the_key:'the_value'}

您可以使用以下等效语法:

obj[name] = value
示例

let obj = {};
obj["the_key"] = "the_value";
或具有ES6功能:

let key = "the_key";
let obj = {
  [key]: "the_value",
};

在这两个示例中,
console.log(obj)
将返回:
{the_key:'the_value'}

您甚至可以创建这样的对象列表

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);
});

您甚至可以创建这样的对象列表

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);
});
使用括号表示法,您可以在对象声明中直接执行此操作:

var obj = {
  [key]: value
}
其中,
key
可以是返回值的任何类型的表达式(例如变量):

var obj = {
  ['hello']: 'World',
  [x + 2]: 42,
  [someObject.getId()]: someVar
}
使用括号表示法,您可以在对象声明中直接执行此操作:

var obj = {
  [key]: value
}
其中,
key
可以是返回值的任何类型的表达式(例如变量):

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

使用lodash,可以创建如下新对象:

或者,您可以设置为现有对象,如下所示:

var existingObj = { a: 1 };
_.set(existingObj, 'a', 5); // existingObj will be: { a: 5 }
如果要在路径中使用点(“.”),应小心,因为lodash可以设置层次结构,例如:

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

使用lodash,可以创建如下新对象:

或者,您可以设置为现有对象,如下所示:

var existingObj = { a: 1 };
_.set(existingObj, 'a', 5); // existingObj will be: { a: 5 }
如果要在路径中使用点(“.”),应小心,因为lodash可以设置层次结构,例如:

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

随着ES2015的出现,OP的代码归结为:

var obj = Object.assign.apply({}, $(itemsFromDom).map((i, el) => ({[el.id]: el.value})));

随着ES2015的出现,OP的代码归结为:

var obj = Object.assign.apply({}, $(itemsFromDom).map((i, el) => ({[el.id]: el.value})));

objectname.newProperty=value

objectname.newProperty=value

如果要向对象动态添加字段,最简单的方法如下:

let params = [
  { key: "k1", value: 1 },
  { key: "k2", value: 2 },
  { key: "k3", value: 3 },
];
let data = {};

for (let i = 0; i < params.length; i++) {
  data[params[i].key] = params[i].value;
}

console.log(data); // -> { k1: 1, k2: 2, k3: 3 }
让参数=[
{键:“k1”,值:1},
{键:“k2”,值:2},
{键:“k3”,值:3},
];
让数据={};
for(设i=0;i{k1:1,k2:2,k3:3}

如果要向对象动态添加字段,最简单的方法如下:

let params = [
  { key: "k1", value: 1 },
  { key: "k2", value: 2 },
  { key: "k3", value: 3 },
];
let data = {};

for (let i = 0; i < params.length; i++) {
  data[params[i].key] = params[i].value;
}

console.log(data); // -> { k1: 1, k2: 2, k3: 3 }
让参数=[
{键:“k1”,值:1},
{键:“k2”,值:2},
{键:“k3”,值:3},
];
让数据={};
for(设i=0;i{k1:1,k2:2,k3:3}

首先我们需要将key定义为变量,然后我们需要将key指定为object.,例如
var data={key:'dynamic_key',value:'dynamic_value'}
var key=data.key;
var obj={[key]:data.value}

log(obj)
首先我们需要将key定义为变量,然后我们需要将key指定为object.,例如
var data={key:'dynamic_key',value:'dynamic_value'}
var key=data.key;
var obj={[key]:data.value}

console.log(obj)
有两种不同的符号来访问对象属性

  • 符号:myObj.prop1
  • 括号符号:myObj[“prop1”]
点表示法快速且简单,但必须显式使用实际的属性名称。没有替代、变量等

括号符号是开放式的。它使用字符串,但您可以使用任何合法的js代码生成字符串。您可以将字符串指定为文字(虽然在本例中,点表示法更易于阅读),或者使用变量或以某种方式进行计算

因此,所有这些都将名为prop1的myObj属性设置为值Hello:

陷阱:

myObj.[xxxx] = "Hello";      // wrong: mixed notations, syntax fail
myObj[prop1] = "Hello";      // wrong: this expects a variable called prop1
tl;dnr:如果要计算或引用密钥,必须使用括号表示法。如果要显式使用该键,则使用点符号表示简单的清晰代码


注意:还有其他一些好的和正确的答案,但我个人觉得它们有点简短,因为我对JS的飞行诡异不太熟悉。这可能对某些人有用

有两种不同的符号来访问对象属性

const data = [{
    name: 'BMW',
    value: '25641'
  }, {
    name: 'Apple',
    value: '45876'
  },
  {
    name: 'Benz',
    value: '65784'
  },
  {
    name: 'Toyota',
    value: '254'
  }
]

const obj = {
  carsList: [{
    name: 'Ford',
    value: '47563'
  }, {
    name: 'Toyota',
    value: '254'
  }],
  pastriesList: [],
  fruitsList: [{
    name: 'Apple',
    value: '45876'
  }, {
    name: 'Pineapple',
    value: '84523'
  }]
}

let keys = Object.keys(obj);

result = {};

for(key of keys){
    let a =  [...data,...obj[key]];
    result[key] = a;

}
  • 符号:myObj.prop1
  • 括号符号:myObj[“prop1”]
点表示法快速且简单,但必须显式使用实际的属性名称。没有替代、变量等

括号符号是开放式的。它使用字符串,但您可以使用任何合法的js代码生成字符串。您可以将字符串指定为文字(虽然在本例中,点表示法更易于阅读),或者使用变量或以某种方式进行计算

因此,所有这些都将名为prop1的myObj属性设置为值Hello:

陷阱:

myObj.[xxxx] = "Hello";      // wrong: mixed notations, syntax fail
myObj[prop1] = "Hello";      // wrong: this expects a variable called prop1
tl;dnr:如果要计算或引用密钥,必须使用括号表示法。如果要显式使用该键,则使用点符号表示简单的清晰代码


注意:还有其他一些好的和正确的答案,但我个人觉得它们有点简短,因为我对JS的飞行诡异不太熟悉。这可能对某些人有用

如果您有对象,您可以创建一个键数组,然后通过映射,并从以前的对象键和值创建新对象

const data = [{
    name: 'BMW',
    value: '25641'
  }, {
    name: 'Apple',
    value: '45876'
  },
  {
    name: 'Benz',
    value: '65784'
  },
  {
    name: 'Toyota',
    value: '254'
  }
]

const obj = {
  carsList: [{
    name: 'Ford',
    value: '47563'
  }, {
    name: 'Toyota',
    value: '254'
  }],
  pastriesList: [],
  fruitsList: [{
    name: 'Apple',
    value: '45876'
  }, {
    name: 'Pineapple',
    value: '84523'
  }]
}

let keys = Object.keys(obj);

result = {};

for(key of keys){
    let a =  [...data,...obj[key]];
    result[key] = a;

}
Object.keys(myObject)
.map(el =>{
 const obj = {};
 obj[el]=myObject[el].code;
 console.log(obj);
});

如果有对象,则可以生成键数组,然后通过映射,并从以前的对象键和值创建新对象

Object.keys(myObject)
.map(el =>{
 const obj = {};
 obj[el]=myObject[el].code;
 console.log(obj);
});

ajavascript有两种类型的注释用于获取javascript对象属性:

Obj={}

1) (.)注释,如Obj.id 只有当对象