我用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”的属性。上面给了我名字。
我如何使用JavaScript使用变量命名对象的属性?
使用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" } } }
如果你想动态地给一个对象添加字段,最简单的方法如下:
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 }
访问对象属性有两种不同的表示法
点符号:myObj.prop1
括号:myObj["prop1"]
点表示法快速简便,但必须显式地使用实际的属性名。没有替换,变量等等。
括号符号是开放式的。它使用字符串,但您可以使用任何合法的js代码生成字符串。您可以将字符串指定为文字(尽管在这种情况下点表示法会更容易阅读),或者使用变量或以某种方式进行计算。
因此,这些都将名为prop1的myObj属性的值设置为Hello:
// 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;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;
}
javascript有两种类型的注释来获取javascript对象属性:
Obj = {};
1)注释;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;
})