Programing

JavaScript 객체 변수에 추가 할 동적 키를 작성하는 방법

lottogame 2020. 5. 15. 07:58
반응형

JavaScript 객체 변수에 추가 할 동적 키를 작성하는 방법


이 질문에는 이미 답변이 있습니다.

이런 식으로 노력하고 있지만이 예제는 작동하지 않습니다.

jsObj = {};

for (var i = 1; i <= 10; i++) {
    jsObj{'key' + i} = 'example ' + 1;
}

이와 같은 동적 키를 만들려면 어떻게해야합니까?


대괄호 :

jsObj['key' + i] = 'example' + 1;

JavaScript에서 모든 배열은 객체이지만 모든 객체가 배열 인 것은 아닙니다. 주요 차이점 (및 일반 JavaScript 및 일반 객체로는 흉내 내기가 매우 어렵다)은 배열 인스턴스가 length속성을 유지하여 이름이 숫자 인 속성의 숫자 값과 숫자로 변환 될 때의 값을 더한 값을 반영한다는 것입니다 는 이러한 모든 속성 중 가장 큰 것입니다. 그건 정말 이상한 소리를하지만, 배열 인스턴스를 제공한다는 것이 단지 수단, 같은 이름을 가진 속성은 "0", "5", "207"등, 모든 존재의 가치를 결정하는 점에서 특별하게 취급된다 length. 또한 그 속성 제거 하도록 값을 length설정할 수 있습니다 . 배열을로 설정length0 이름이 정수처럼 보이는 모든 속성을 효과적으로 제거합니다.

자, 이것이 배열을 특별하게 만드는 것입니다. 그러나이 모든 것은 JavaScript [ ]연산자의 작동 방식 과 전혀 관련이 없습니다 . 이 연산자는 모든 객체에서 작동하는 객체 속성 액세스 메커니즘입니다. 숫자 속성 속성 이름은 단순한 속성 액세스에 관한 한 특별하지 않다는 점에 유의해야합니다. 숫자처럼 보이는 문자열 일 뿐이지 만 JavaScript 객체 속성 이름은 원하는 문자열이 될 수 있습니다.

따라서 [ ]연산자 for가 배열을 반복 하는 루프 에서 작동 하는 방식은 다음과 같습니다.

for (var i = 0; i < myArray.length; ++i) {
  var value = myArray[i]; // property access
  // ...
}

[ ]이름이 계산 문자열 인 속성에 액세스 할 때 작동 방식과 크게 다르지 않습니다 .

var value = jsObj["key" + i];

[ ]연산자하고있다 정확하게 두 경우 모두에서 같은 일을. 어떤 경우에는 관련된 객체가 배열이라는 사실은 중요하지 않습니다.

사용하여 속성 값을 설정할속성 유지와 관련된 특수 동작을 제외하고[ ] 는 스토리가 동일 합니다. 배열 인스턴스에서 숫자 키를 사용하여 속성을 설정 한 경우 :length

myArray[200] = 5;

그런 다음 ( "200"이 가장 큰 숫자 속성 이름 인 경우) length속성이 201속성 할당의 부작용 으로 업데이트됩니다 . 그러나 일반 객체에 대해 동일한 작업을 수행하는 경우 :

myObj[200] = 5;

그러한 부작용은 없습니다. 배열과 객체의 "200"이라는 속성 5은 그렇지 않으면 정확히 같은 방식으로 값으로 설정됩니다 .

length동작이 매우 편리 하기 때문에 모든 객체를 일반 객체 대신 Array 생성자의 인스턴스로 만들 수도 있습니다. 그것에 대해 직접적으로 잘못된 것은 없습니다 (특히 다른 언어에 익숙한 사람들, 일부 속성은 포함 length되지만 다른 속성에는 포함 되지 않기 때문에 혼동 될 수 있음 ). 그러나 JSON 직렬화 작업을하는 경우 (일반적으로) 숫자로 명명 된 속성 포함 하는 방식으로 배열 인스턴스가 JSON으로 직렬화됨을 이해 하십시오. 배열에 추가 된 다른 속성은 직렬화 된 JSON 형식으로 나타나지 않습니다. 예를 들어 :

var obj = [];
obj[0] = "hello world";
obj["something"] = 5000;

var objJSON = JSON.stringify(obj);

"objJSON"의 값은 다음을 포함하는 문자열입니다 ["hello world"]. "무언가"속성이 손실됩니다.

ES2015 :

ES6 JavaScript 기능을 사용할 수있는 경우 컴퓨팅 속성 이름사용 하여이를 매우 쉽게 처리 할 수 ​​있습니다.

var key = 'DYNAMIC_KEY',
    obj = {
        [key]: 'ES6!'
    };

console.log(obj);
// > { 'DYNAMIC_KEY': 'ES6!' }

JavaScript의 연관 배열은 다른 언어에서와 동일하게 작동하지 않습니다. for each명령문은 상속 된 프로토 타입 속성을 열거하기 때문에 복잡합니다. Pointy가 언급 한 것처럼 객체 / 연관 배열에서 속성을 선언 할 수 있지만 실제로 이러한 종류의 경우 push메소드 와 함께 배열을 사용해야합니다 .

jsArr = []; 

for (var i = 1; i <= 10; i++) { 
    jsArr.push('example ' + 1); 
} 

인덱스 배열은 0부터 시작하므로 첫 번째 요소는 jsArr [1]이 아니라 jsArr [0]이됩니다.

참고URL : https://stackoverflow.com/questions/2462800/how-do-i-create-a-dynamic-key-to-be-added-to-a-javascript-object-variable

반응형