>source

빈 개체가 있고 개체 내부에 동적으로 개체를 만들고 싶습니다.

const obj = {}
obj["test1"]["test1.1"] = x //initialize to some variable

오류가 발생합니다

Uncaught TypeError: Cannot set property 'test1.1' of undefined

출력이 다음과 같기를 원합니다.

obj = {
   test1: {
       test1.1: x //some variable
   }
}

  • 답변 # 1

    으로동적으로속성 이름이 확실하지 않은 경우 대괄호를 사용하여 동적 변수 이름을 삽입 할 수 있습니다.

    const arg1 = 'test1';
    const arg2 = 'test1.1';
    const x = 42;
    // assign both variable names dynamically
    const obj = { [arg1]: { [arg2]: x } };
    console.log(obj);
    
    

  • 답변 # 2

    두 단계 또는 한 단계로이 작업을 수행 할 수 있습니다.

    const x = "some var";
    const obj = {};
    obj["test1"] = {
      "test1.1": x
    }; // assign the nested object 
    console.log(obj);
    // or 
    const y = "some var";
    const obj1 = {  // assign the complete object 
      test1: {
        "test1.1": x
      }
    }; 
    console.log(obj1);
    
    

  • 답변 # 3

    초기화해야합니다. obj["test1"] = {}

    const obj = {}
    obj["test1"] = {}
    obj["test1"]["test1.1"] = 'x'
    console.log(obj)
    
    

    <시간 /> lodash 라이브러리를 사용하는 다른 솔루션의 경우 set () 메서드를 사용할 수 있습니다.

    var obj = {}
    _.set(obj, ["test1", "test1.1"], 'x');
    console.log(obj)
    
    

    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>
    
    

  • 답변 # 4

    const obj = Object.assign({}, {test1:{'test1.1': 'x'}});
    console.log(obj);
    
    

    이 시도.

  • 답변 # 5

    보다 기능적인 접근 방식

    const arr = {};
    // respecting immutability
    const rewroteArray = {...arr, da: {"foo": 2}}
    console.log(rewroteArray);
    
    

관련 자료

  • 이전 angular - 관찰 가능 항목의 concatMap 배열
  • 다음 linux - Liux datetime의 밀리 초 부분 반올림