2017-04-21 5 views
0

을 수정 나는 개체가 :자바 스크립트 객체의 속성 자체

var obj = { 
    'aa' : 1, 
    'bb' : 2 
} 

속성 a|aaa로 변경되었습니다 여기서

var obj = { 
    'a|a' : 1, 
    'b|b' : 2 
} 

내가 뭔가에 obj 변경을 원했습니다.

동일한 작업을 수행 할 수있는 방법이 있습니까?

+2

을 원하는 사용 사례는이 무엇입니까? – dbr

+0

[변경 속성 이름] 가능한 중복 (http://stackoverflow.com/questions/8483425/change-property-name) – aw04

+0

@DeanBrunt : 공백이나 특수 문자를 사용할 수없는 검도 표를 채우는 중입니다. 'field'속성. 내 서버는 실제로 '필드'및 '제목'속성을 'a | a'라는 단일 객체 속성으로 변환합니다. 궁극적으로 속성을 'aa'로 변경해야합니다. – Adithya

답변

3

개체를 반복하는 방법은 여러 가지가 있습니다.

for (let key in obj) { 
    console.log(key, '=>', obj[key]); 
} 

그래서 키 이름 변경 String.replace를 사용하여 포함 할 키 이름을 변경 : 내가 가장 간단한 방법은 for..in 문 사용하고있는 것

var obj = { 
 
    'a|a' : 1, 
 
    'b|b' : 2 
 
} 
 

 
let newObj = {}; 
 
for (let key in obj) { 
 
    if (obj.hasOwnProperty(key)) { 
 
     newObj[key.replace('|', '')] = obj[key]; 
 
    } 
 
} 
 

 
console.log(newObj);

만약 당신 돈 새 개체를 만들고 싶지 않다면 새 키를 추가하고 delete obj[key]

,210
for (let key in obj) { 
    if (obj.hasOwnProperty(key)) { 
     obj[key.replace('|', '')] = obj[key]; 
     delete obj[key]; 
    } 
} 

또 다른 방법은 키/속성을 통해 Array.reduce 사용하는 것입니다 : 내가 유용한 방식으로이 질문에 대답하기 전에

Object.getOwnPropertyNames(obj).reduce((p, c) => { 
    p[c.replace('|', '')] = obj[c]; 
    return p; 
}, {}); 
+0

의 의미를 설명 할 수 있습니까? obj [key.replace ('|', '')] = obj [key]; – Adithya

+1

물론,'key'는''a | a''처럼 보이므로'key.replace ('|', '')'는'aa'를 얻을 것입니다. 'obj [ 'aa'] = obj [ 'a | a']'또는'obj ('obj [key]')의 값은 1입니다. [ 'aa'] = 1 ' –

+0

obj [key.replace ('| ',' ')]는 기존 객체 내에 새 키를 만들고'= obj [c] '는'obj [c] '의 값을 새 열쇠? Strings의 불변성으로 인한이 동작입니까? 이전 키를 삭제해야하는 이유가 무엇입니까? – Adithya

4

당신은 이런 식으로 작업을 수행 할 수 있습니다

Object.getOwnPropertyNames(obj).forEach(function (key) { 
    obj[key.replace('|', '')] = obj[key]; 
    delete obj[key]; 
}); 

단순히 모든 객체 키를 반복하고 (characted |하지 않고) 새 키에 값을 할당하고, 이후에 이전 키를 삭제합니다.

+1

이것은 훌륭한 해결책입니다. 나는 또한 열거 형을 무시하기 위해'Object.keys()'대신'Object.getOwnPropertyNames()'를 제안 할 것이다 ... – Badacadabra

+1

사실, 대답이 업데이트 될 것이다. 지적 해 주셔서 고마워,이 차이에 대해 몰랐다. –

+0

글쎄,'Object.keys()'를 가진 당신의 솔루션은 완벽하게 유효했다. 이것은 단지 제안이었고 코드를 편집 할 필요가 없었습니다. ;) – Badacadabra

3
 var obj = { 
      'a|a': 1, 
      'b|b': 2 
     } 

     let keys = Object.keys(obj); 
     let newObj = {}; 
     for (let key of keys) { 
      let transformedKey = key.replace("|","") ; // transform your key 
      newObj[transformedKey] = obj[key] 
     } 

     console.log(newObj); 

이것은 사용중인 용도를 수정 한 것입니다.

관련 문제