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

我用jQuery将项目从DOM中拉出来,并希望使用DOM元素的id设置对象上的属性。

例子

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

如果itemsFromDom包含一个id为“myId”的元素,我希望obj有一个名为“myId”的属性。上面给出了name

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

372511 次浏览

你可以使用这个等价的语法:

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

对于ECMAScript 2015,你可以直接在对象声明中使用括号表示:

var obj = {
[key]: value
}

key可以是返回值的任何类型的表达式(例如变量):

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

使用lodash,你可以创建像_.set这样的新对象:

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

或者你可以像这样设置一个现有的对象:

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

如果你想在路径中使用点("."),你应该小心,因为lodash可以设置层次结构,例如:

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

随着ES2015 Object.assign计算属性名的出现,OP的代码归结为:

var obj = Object.assign.apply({}, $(itemsFromDom).map((i, el) => ({[el.id]: el.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 }
首先我们需要将key定义为变量,然后我们需要将key赋值为对象。例如,
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代码生成字符串。您可以将字符串指定为文字(尽管在这种情况下点表示法会更容易阅读),或者使用变量或以某种方式进行计算。

因此,这些都将名为prop1myObj属性设置为值你好:

// 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";

陷阱:

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

tl;医嘱:如果你想计算或引用键,必须使用括号。如果显式使用键,则使用点符号进行简单的清晰代码。

注意:还有其他一些好的和正确的答案,但我个人认为它们有点简短,因为对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);
});

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

Obj = {};

1) (.) annotation;Obj.id 这只在对象已经有名称为'id'

的属性时才有效

2)([])注释;Obj[id]如果对象没有任何名称为'id'的属性,它将创建一个名称为'id'的新属性。

下面举个例子:

当你写入Obj[name]时,总是会创建一个新的属性。 如果属性已经存在并且具有相同的名称,则将覆盖它

const obj = {}
jQuery(itemsFromDom).each(function() {
const element = jQuery(this)
const name = element.attr('id')
const value = element.attr('value')
// This will work
obj[name]= value;
})

与主题相关,但不是专门针对jquery的。我在ec6 react项目中使用了这个,可能会帮助到一些人:

this.setState({ [`${name}`]: value}, () => {
console.log("State updated: ", JSON.stringify(this.state[name]));
});

注:请注意引用字符。

访问对象值的3种方式 我们可以通过传入适当的键来输出对象值。因为在我的例子中我使用了表情符号作为键,这有点棘手。让我们看一个更简单的例子

let me = {
name: 'samantha',
};


// 1. Dot notation
me.name; // samantha


// 2. Bracket notation (string key)
me['name']; // samantha


// 3. Bracket notation (variable key)
let key = 'name';
me[key]; // samantha

know more