Ответ 1
Вы можете использовать этот эквивалентный синтаксис:
obj[name] = value
Я вынимаю элементы из DOM с помощью jQuery и хочу установить свойство объекта, используя id
элемента DOM.
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?
Вы можете использовать этот эквивалентный синтаксис:
obj[name] = value
С ECMAScript 2015 вы можете сделать это непосредственно в объявлении объекта с использованием скобки:
var obj = {
[key]: value
}
Где key
может быть любым выражением (например, переменной), возвращающим значение:
var obj = {
['hello']: 'World',
[x + 2]: 42,
[someObject.getId()]: someVar
}
Вы даже можете создать список объектов, подобных этому
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);
});
С помощью 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" } } }
Существует два разных обозначения для доступа к свойствам объекта
Точечная запись выполняется быстро и легко, но вы должны явно использовать фактическое имя свойства. Без подстановки, переменных и т.д.
Обозначение кронштейна открыто. Он использует строку, но вы можете создать строку, используя любой юридический код js. Вы можете указать строку как литерал (хотя в этом случае точечная запись будет легче читать) или использовать переменную или вычислить каким-то образом.
Таким образом, все они устанавливают свойство myObj с именем prop1 в значение 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 на лету quirkiness. Это может быть полезно для некоторых людей.
Сначала нам нужно определить ключ как переменную, а затем нам нужно назначить ключ как объект. Например
var data = {key:'dynamic_key',value:'dynamic_value'}
var key = data.key;
var obj = { [key]: data.value}
console.log(obj)
С появлением ES2015 Object.assign и вычисленное свойство имена код OP сводится к:
var obj = Object.assign.apply({}, $(itemsFromDom).map((i, el) => ({[el.id]: el.value})));
Если вы хотите динамически добавлять поля в объект, самый простой способ сделать это:
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
}
Это создаст объект данных, который имеет следующие поля:
{k1:1, k2:2, k3:3}
Основываясь на ответе wOxxOm, это пример использования:
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);
Если у вас есть объект, вы можете создать массив ключей, затем отобразить и создать новый объект из предыдущих ключей объекта и значений.
Object.keys(myObject)
.map(el =>{
const obj = {};
obj[el]=myObject[el].code;
console.log(obj);
});
objectname.newProperty = value;
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;
}