을 수정 나는 개체가 :자바 스크립트 객체의 속성 자체
var obj = {
'aa' : 1,
'bb' : 2
}
속성 a|a
는 aa
로 변경되었습니다 여기서
var obj = {
'a|a' : 1,
'b|b' : 2
}
내가 뭔가에 obj
변경을 원했습니다.
동일한 작업을 수행 할 수있는 방법이 있습니까?
을 수정 나는 개체가 :자바 스크립트 객체의 속성 자체
var obj = {
'aa' : 1,
'bb' : 2
}
속성 a|a
는 aa
로 변경되었습니다 여기서
var obj = {
'a|a' : 1,
'b|b' : 2
}
내가 뭔가에 obj
변경을 원했습니다.
동일한 작업을 수행 할 수있는 방법이 있습니까?
개체를 반복하는 방법은 여러 가지가 있습니다.
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]
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;
}, {});
의 의미를 설명 할 수 있습니까? obj [key.replace ('|', '')] = obj [key]; – Adithya
물론,'key'는''a | a''처럼 보이므로'key.replace ('|', '')'는'aa'를 얻을 것입니다. 'obj [ 'aa'] = obj [ 'a | a']'또는'obj ('obj [key]')의 값은 1입니다. [ 'aa'] = 1 ' –
obj [key.replace ('| ',' ')]는 기존 객체 내에 새 키를 만들고'= obj [c] '는'obj [c] '의 값을 새 열쇠? Strings의 불변성으로 인한이 동작입니까? 이전 키를 삭제해야하는 이유가 무엇입니까? – Adithya
당신은 이런 식으로 작업을 수행 할 수 있습니다
Object.getOwnPropertyNames(obj).forEach(function (key) {
obj[key.replace('|', '')] = obj[key];
delete obj[key];
});
단순히 모든 객체 키를 반복하고 (characted |
하지 않고) 새 키에 값을 할당하고, 이후에 이전 키를 삭제합니다.
이것은 훌륭한 해결책입니다. 나는 또한 열거 형을 무시하기 위해'Object.keys()'대신'Object.getOwnPropertyNames()'를 제안 할 것이다 ... – Badacadabra
사실, 대답이 업데이트 될 것이다. 지적 해 주셔서 고마워,이 차이에 대해 몰랐다. –
글쎄,'Object.keys()'를 가진 당신의 솔루션은 완벽하게 유효했다. 이것은 단지 제안이었고 코드를 편집 할 필요가 없었습니다. ;) – Badacadabra
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);
이것은 사용중인 용도를 수정 한 것입니다.
을 원하는 사용 사례는이 무엇입니까? – dbr
[변경 속성 이름] 가능한 중복 (http://stackoverflow.com/questions/8483425/change-property-name) – aw04
@DeanBrunt : 공백이나 특수 문자를 사용할 수없는 검도 표를 채우는 중입니다. 'field'속성. 내 서버는 실제로 '필드'및 '제목'속성을 'a | a'라는 단일 객체 속성으로 변환합니다. 궁극적으로 속성을 'aa'로 변경해야합니다. – Adithya