2016-09-30 2 views
-1

저는 새로 개발하기가 쉽기 때문에 객체에 대한 도움이 필요합니다. for 루프를 수행하고 값을 배열로 밀어 넣으려고 시도했습니다. 문제는 각 키/값을 별도로 인덱싱하는 것이 아니라 하나의 인덱스로 모든 키/값을 밀어 넣는 것입니다. 다음과 같이 나는 키/값 개체 함께 일하고 :개체의 인덱싱 된 배열로 Javascript 중첩 개체를 변경하는 방법?

var obj = { 
    "application": { 
     "create": "false", 
     "read": "true", 
     "update": "true", 
     "delete": "false" 
    }, 
    "connection": { 
     "create": "false", 
     "read": "true", 
     "update": "true", 
     "delete": "false" 
    } 
} 

나는 각 키 (응용 프로그램과 연결) 인덱싱 할 필요 - 키 값해야합니다. 예를 들어 다음과 같이 검색합니다.

obj[0] = application 
    obj[0].create = false 
    obj[1] = connection 

도움을 주셔서 감사합니다. 당신이 배열로 밀어 객체의 각 속성을 원하는 경우에

+0

원하는 (유효) 결과를 추가하시기 바랍니다. –

+0

왜 이것이 필요하다고 생각하십니까? 어떤 문제를 해결하려고합니까? –

답변

1

key 필드에 obj 개체의 키를 저장할 수 있습니다. 이것은 array의 객체를 생성합니다. 당신이 배열 세포에 개체의 첫 번째 레벨을 변환 할 같이

var obj = { 
 
    "application": { 
 
    "create": "false", 
 
    "read": "true", 
 
    "update": "true", 
 
    "delete": "false" 
 
    }, 
 
    "connection": { 
 
    "create": "false", 
 
    "read": "true", 
 
    "update": "true", 
 
    "delete": "false" 
 
    } 
 
} 
 

 
var keys = Object.keys(obj) 
 
var arr = [] 
 
keys.map(function(key, i) { 
 
    arr[i] = obj[key] 
 
    arr[i].key = key 
 
}) 
 

 
console.log(arr[0].key) 
 
console.log(arr[0].create) 
 
console.log(arr[1].key)
예상 결과에 의해

+0

고마워, 프라 네시. 어떻게 객체를 가지고이를 수행 할 수 있습니까? 배열 일 필요는 없습니다. 방금 배열이어야한다고 생각했습니다. – Heather

+0

@Heather 답변을 업데이트했습니다. 검사! –

+0

굉장! 너무 고마워요. – Heather

0

, 당신과 같이 객체의 내용을 반복 할 수 있습니다

for (var item in obj){ 
    /* item will equal the first property of obj, in this case: 'application' */ 
    array.push(item) 
} 

array = ["application", "connection"] 

당신은에 인덱스로, 각각의 개체 속성에 자녀를 같은 기술을 사용할 수 있습니다 배열

+0

감사합니다, Andrew. 나는 이것을 시도 할 것이다. 내가 어떻게 아이들을 추가 할 수있는 방법을 제공 할 수 있습니까? Object.getOwnPropertyNames를 사용하여 키를 배열로 푸시하지만 중첩 된 객체도 밀어 넣어야합니다. – Heather

+0

원하는 결과가 무엇인지 물어봐도 될까요? 다른 주석에서 결과가 배열이어야한다고 생각한다고 언급했습니다. 원하는 결과가 무엇인지 알면보다 정확한 해결책을 제공 할 수 있습니다. –

+0

이 데이터로 표를 채우려고합니다. 테이블의 머리글은 모델, 만들기, 읽기, 업데이트, 삭제입니다. 모델 열은 응용 프로그램과 연결로 채워 져야합니다. 각 모델에 대해 작성, 읽기, 갱신 및 삭제 값을 채워야합니다. – Heather

0

, 그것은 보인다.

이 그것을 할 것입니다 :

var arr = [], i=0; 
for (var key in obj) { 
    arr[key] = obj[key] // For accessing via the property name for example e.g. application 
    arr[i] = obj[key] // For index access for example obj[0] 
    i++; 
} 

당신은 또한 그것을 수행 할 .MAP의 방법을 사용할 수 있습니다.

+0

'나는 어디에서 왔는가? 왜 그냥 숫자 키로'obj'를 확장하는 대신에 배열을 만드는 겁니까? –

+0

맞아, 설정하는 것을 잊어 버렸습니다. 예제를 업데이트했습니다. – fistuks

0

내부 객체의 자식으로 키를 반복하고 새 배열을 지정할 수 있습니다.

var obj = { application: { create: "false", read: "true", update: "true", delete: "false" }, connection: { create: "false", read: "true", update: "true", delete: "false" } }, 
 
    array = Object.keys(obj).map(function (k) { 
 
     return [k].concat(Object.keys(obj[k]).map(function (kk) { 
 
      return obj[k][kk]; 
 
     })); 
 
    }); 
 

 
console.log(array);

+0

감사합니다. Nina.이 색인 - 그러나, 나는 여전히 키 (응용 프로그램과 연결)를 유지해야합니다. 콘솔 로그가 [0] 개체를 인쇄 중입니다. – Heather

+0

질문에 원하는 결과를 모두 입력하십시오. 그것이 작성된대로, 그것은 유효한 자바 스크립트가 아닙니다. –

관련 문제