[javascript] 변수를 이름으로 사용하여 JavaScript 객체에 속성을 추가 하시겠습니까?
jQuery를 사용하여 DOM에서 항목을 가져오고 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
})
“myId” itemsFromDom
의 요소를 포함하는 경우 id
“myId” obj
라는 속성을 갖고 싶습니다 . 위의 내용은 저에게 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);
});
답변
객체 속성에 액세스하는 두 가지 표기법이 있습니다
- 점 표기법 : 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 on-the-fly 기발한 지식에 대한 지식이 적다는 것을 개인적으로 발견했습니다. 이것은 일부 사람들에게 유용 할 수 있습니다.
답변
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" } } }
답변
먼저 키를 변수로 정의한 다음 키를 객체로 지정해야합니다.
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})));