JavaScript 객체에서 속성을 제거하려면 어떻게합니까?
질문
다음과 같이 객체를 만듭니다.
let myObject = {
"ircEvent": "PRIVMSG",
"method": "newURI",
"regex": "^http://.*"
};
다음과 같이 새 MyObject로 끝나는 속성 정규식을 어떻게 제거해야합니까?
let myObject = {
"ircEvent": "PRIVMSG",
"method": "newURI"
};
답변
개체 (객체를 돌연변이)에서 속성을 제거하려면 다음과 같이 할 수 있습니다.
delete myObject.regex;
// or,
delete myObject['regex'];
// or,
var prop = "regex";
delete myObject[prop];
데모 var myObject = { "Ircevent": "privmsg", "방법": "newuri", "regex": "^ http : //.*" }; myObject.regex 삭제; console.log (myObject);
더 많은 정보를 읽는 데 관심이있는 모든 사람을 위해 스택 오버플로 사용자 Kangax는 블로그에서 Delete 문에 대한 딥 블로그 게시물을 작성하여 삭제를 이해합니다.그것은 적극 권장됩니다.
일부를 제외하고 원본의 모든 키가있는 새로운 개체를 원한다면 파괴를 사용할 수 있습니다.
데모 myObject = { "Ircevent": "privmsg", "방법": "newuri", "regex": "^ http : //.*" }; const {regex, ... newobj} = myObject; console.log (newobj);// 'regex'키가 없습니다 console.log (myObject);//는 변하지 않습니다
답변
JavaScript의 객체는 키와 값 사이의지도로 생각할 수 있습니다.삭제 연산자는이 키를 한 번에 하나씩 객체 속성이라고도하는 이러한 키를 제거하는 데 사용됩니다.
var obj = { myproperty : 1. } console.log (obj.hasownproperty ( 'myproperty')) // true obj.myProperty를 삭제하십시오 console.log (obj.hasownproperty ( 'myProperty')) // false
삭제 연산자는 메모리가 직접 여유하지 않으며 객체에서 속성 자체가 제거 된 것에 대해 null 값 또는 정의되지 않은 값을 할당하는 것과 다릅니다.삭제 된 속성의 값이 참조 유형 (오브젝트)이고 프로그램의 다른 부분은 해당 객체에 대한 참조를 여전히 보유하고 있으며, 해당 객체는 물론 모든 참조가있을 때까지 가비지가 수집되지 않습니다.사라졌다.
삭제는 디스크립터가 구성 가능한 것으로 표시하는 속성에서만 작동합니다.
답변
var myObject = { "iRcevent": "privmsg", "method": "newuri", "regex": "^ http : //.*"}; myObject.regex 삭제; console.log (myObject.Regex);// 로그 : undefined.
이것은 Firefox와 Internet Explorer에서 작동하며 다른 모든 사람들에게는 작동한다고 생각합니다.
답변
오래 된 질문, 현대 답변.객체 파괴를 사용하여 ECMAScript 6 기능을 사용하면 간단합니다.
const { a, ...rest } = { a: 1, b: 2, c: 3 };
또는 질문 샘플로 :
const myObject = {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"};
const { regex, ...newObject } = myObject;
console.log(newObject);
Babel Try-Out Editor에서 작업 할 수 있습니다.
편집하다:
동일한 변수로 재 할당하려면 다음을 사용하십시오.
let myObject = {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"};
({ regex, ...myObject } = myObject);
console.log(myObject);
답변
삭제 연산자는 객체의 속성을 제거하는 데 사용됩니다.
const obj = { foo: "bar" }
delete obj.foo
obj.hasOwnProperty("foo") // false
어레이의 경우 요소를 제거하는 것과 같지 않습니다.배열에서 요소를 제거하려면 Array # Splice 또는 Array # POP를 사용하십시오.예를 들어:
arr // [0, 1, 2, 3, 4]
arr.splice(3,1); // 3
arr // [0, 1, 2, 4]
세부
JavaScript에서 삭제는 C 및 C ++의 키워드와 다른 기능을 갖추고 있습니다. 그것은 직접적인 메모리를 자유롭지 않습니다.대신 해당 목적은 객체의 속성을 제거하는 것입니다.
어레이의 경우 인덱스에 해당하는 속성을 삭제하려면 스파 스 배열을 만듭니다 (즉, "구멍"이있는 배열).대부분의 브라우저는 이러한 누락 된 배열 인덱스를 "empty"로 표시합니다.
var array = [0, 1, 2, 3]
delete array[2] // [0, 1, empty, 3]
삭제는 배열 [3]을 배열 [2]으로 재배치하지 않습니다.
JavaScript의 다른 내장 함수는 Sparse 배열을 다르게 처리합니다.
for ... in은 빈 인덱스를 완전히 건너 뜁니다. 전통적인 루프는 색인의 값에 대해 정의되지 않음을 반환합니다. Symbol.Iterator를 사용하는 모든 메소드는 색인의 값에 대해 정의되지 않은 값을 반환합니다. foreach,지도 및 축소는 누락 된 색인을 건너 뜁니다.
따라서 삭제 연산자는 배열에서 요소를 제거하는 공통 유스 케이스에 사용해서는 안됩니다.배열에는 요소를 제거하고 메모리를 재 할당하기위한 전용 메소드가 있습니다. 배열 # splice () 및 배열 # 팝.
배열 # 스플 라이스 (시작 [, deleteCount [, item1 [, item2 [, ...]]]))
Array # 스플 라이스가 배열을 돌연변이로 돌리고 제거 된 지표를 반환합니다.DeleteCount 요소는 인덱스 시작에서 제거되고 item1, item2 ... itemn은 인덱스 시작에서 배열에 삽입됩니다.deleteCount가 생략되면 startIndex의 요소가 배열의 끝으로 제거됩니다.
let a = [0,1,2,3,4]
a.splice(2,2) // returns the removed elements [2,3]
// ...and `a` is now [0,1,4]
또한 Array.Prototype : Array # 슬라이스에서 유사하게 명명되지만 다른 기능이 있습니다.
배열 # 슬라이스 ([시작 [시작]])
Array # 슬라이스는 비파괴되지 않으며 시작된 인덱스를 포함하는 새 배열을 시작에서 끝까지 반환합니다.끝이 지정되지 않은 상태로 유지되면 배열의 끝 부분까지 기본값이됩니다.끝이 양수이면 0 기반의 비 포함 된 인덱스가 정지 할 수 있습니다.끝이 음수이면 배열의 끝에서 다시 계산하여 멈추는 인덱스를 지정합니다 (예 : -1은 최종 인덱스를 생략합니다).end <= 시작하면 결과는 빈 배열입니다.
let a = [0,1,2,3,4]
let slices = [
a.slice(0,2),
a.slice(2,2),
a.slice(2,3),
a.slice(2,5) ]
// a [0,1,2,3,4]
// slices[0] [0 1]- - -
// slices[1] - - - - -
// slices[2] - -[3]- -
// slices[3] - -[2 4 5]
배열 # POP.
Array # 팝은 배열에서 마지막 요소를 제거하고 해당 요소를 반환합니다.이 작업은 배열의 길이를 변경합니다.
답변
확산 구문 (ES6)
Koen의 답변을 완료하려면 스프레드 구문을 사용하여 동적 변수를 제거하려면 다음과 같이 할 수 있습니다.
const 키 = 'a'; const {[KEY] : foo, ... REST} = {a : 1, b : 2, c : 3}; console.log (foo);// 1 console.log (나머지);// {B : 2, C : 3}
* foo는 (1 인 1) 값을 가진 새로운 변수가 될 것입니다.
확장 된 답변 😇.
객체에서 속성을 제거하는 몇 가지 일반적인 방법이 있습니다.각각은 자체 장단점을 가지고 있습니다 (이 성능 비교 점검).
연산자 삭제
그러나 짧게 읽을 수 있으며 짧은 수의 객체가 최적화되지 않으므로 많은 수의 개체에서 작동하는 경우 최상의 선택이 아닐 수도 있습니다.
delete obj[key];
재배치
삭제보다 2 배 이상 빠릅니다. 그러나 속성은 삭제되지 않으며 반복 할 수 있습니다.
obj[key] = null;
obj[key] = false;
obj[key] = undefined;
스프레드 연산자
이 ES6 운영자는 기존 객체를 돌연변이하지 않고 모든 속성을 제외하고 브랜드의 새로운 객체를 반환 할 수 있습니다.단점은 한 번에 많은 속성을 제거 해야하는 경우 위의 성능이 악화되고 사용되지 않는 것이 좋습니다.
{ [key]: val, ...rest } = obj;
출처:https://stackoverflow.com/questions/208105/how-do-i-remove-a-property-from-a-javascript-object
최근댓글