Javascript - 개체에서 정의되지 않은 필드 제거
정의되지 않은 필드를 개체에서 제거하는 깨끗한 방법이 있습니까?
예.
> var obj = { a: 1, b: undefined, c: 3 }
> removeUndefined(obj)
{ a: 1, c: 3 }
두 가지 솔루션을 발견했습니다.
_.each(query, function removeUndefined(value, key) {
if (_.isUndefined(value)) {
delete query[key];
}
});
또는:
_.omit(obj, _.filter(_.keys(obj), function(key) { return _.isUndefined(obj[key]) }))
ES6 화살표 기능 및 3원 연산자를 사용하는 원라이너:
Object.keys(obj).forEach(key => obj[key] === undefined ? delete obj[key] : {});
또는 3차 평가 대신 단락 평가를 사용합니다. (@Matt Langlois, 정보 감사합니다!)
Object.keys(obj).forEach(key => obj[key] === undefined && delete obj[key])
if 문을 사용한 동일한 예:
Object.keys(obj).forEach(key => {
if (obj[key] === undefined) {
delete obj[key];
}
});
중첩된 개체에서도 항목을 제거하려면 재귀 함수를 사용할 수 있습니다.
const removeEmpty = (obj) => {
let newObj = {};
Object.keys(obj).forEach((key) => {
if (obj[key] === Object(obj[key])) newObj[key] = removeEmpty(obj[key]);
else if (obj[key] !== undefined) newObj[key] = obj[key];
});
return newObj;
};
저는 Lodash와 같은 것을 사용하는 것을 선호합니다.
import { pickBy, identity } from 'lodash'
const cleanedObject = pickBy(originalObject, identity)
참고로 ID 기능은 다음과 같습니다.x => x
모든 거짓 값에 대해 결과가 거짓이 됩니다.정의되지 않은, ", 0, null, ...을 제거합니다.
당신이 원하는 것이.undefined
제거된 값은 다음과 같습니다.
const cleanedObject = pickBy(originalObject, v => v !== undefined)
다른 답변 중 일부에서 제안하는 것처럼 원래 개체를 돌연변이화하는 것보다 일반적으로 선호되는 새로운 개체를 제공합니다.
JSON 유틸리티 사용
개요
다음과 같은 물체가 주어질 때:
var obj = { a: 1, b: undefined, c: 3 }
제거하기undefined
객체에서 우리는 중첩된 JSON 방법을 사용하여 다음과 같이 문자열화하고 구문 분석할 수 있습니다.
JSON.parse(JSON.stringify(obj))
실시간 예제
var obj = { a: 1, b: undefined, c: 3 }
var output = JSON.parse(JSON.stringify(obj));
console.log(output)
제한 사항 및 경고
Javascript 구현 방법에 따라 다릅니다.
- 의 가능성이 있습니다
undefined
로 변환됩니다.null
그냥 제거되는 대신에. - 중첩됨
Object
,Array
문자열로 변환됩니다. Date
,time
값도 문자열로 변환됨
테스트됨
위의 코드는 Firefox, Chrome 및 Node 14.18.1에서 테스트되었으며 모든 obj 어레이에서 "b"를 제거했습니다.그래도 안정적인 환경(클라우드 기능이나 도커 등)이 아니라면 이 방법을 사용할 때 주의를 기울이는 것이 좋습니다. 이 방법 클라이언트 쪽에 의존하지 않을 것입니다.
언급되지 않았기 때문에, 다음은 제가 선호하는 방법인 산 부작용 또는 외부 의존성입니다.
const obj = {
a: 1,
b: undefined
}
const newObject = Object.keys(obj).reduce((acc, key) => {
const _acc = acc;
if (obj[key] !== undefined) _acc[key] = obj[key];
return _acc;
}, {})
console.log(newObject)
// Object {a: 1}
// UPDATE: briefer version from @nicholas-hamilton with fewer assignments
const newObject2 = Object.keys(obj).reduce(
(acc, key) =>
obj[key] === undefined ? { ...acc } : { ...acc, [key]: obj[key] },
{},
);
console.log(newObject2)
// Object {a: 1}
이 솔루션은 또한 다음과 같은 문제가 발생하지 않습니다.hasOwnProperty()
목적어로서keys는 지정된 개체의 고유한 열거 가능한 속성 배열을 반환합니다.
Object.keys(obj).forEach(function (key) {
if(typeof obj[key] === 'undefined'){
delete obj[key];
}
});
그리고 이것을 다음과 같이 추가할 수 있습니다.null
또는''
더 엄격한 청소를 위해.
다음은 일반적인 Javascript(라이브러리가 필요하지 않음) 솔루션입니다.
function removeUndefinedProps(obj) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop) && obj[prop] === undefined) {
delete obj[prop];
}
}
}
작업 데모: http://jsfiddle.net/jfriend00/djj5g5fu/
음.. @Damian이 부탁하는 것 같아요.remove undefined field (property) from an JS object
그런 다음 간단하게 다음을 수행합니다.
for (const i in myObj) {
if (typeof myObj[i] === 'undefined') {
delete myObj[i];
}
}
(베닐라) JS의 짧고 효율적인 솔루션! 예:
const myObj = {
a: 1,
b: undefined,
c: null,
d: 'hello world'
};
for (const i in myObj) {
if (typeof myObj[i] === 'undefined') {
delete myObj[i];
}
}
console.log(myObj);
이것은 기억하기 쉽지만, 느릴 수 있습니다.jQuery를 사용하여 null이 아닌 속성을 빈 개체에 복사합니다.추가하지 않으면 딥 카피가 없습니다.true
제1변론으로서
myObj = $.extend({}, myObj);
다른 Javascript 솔루션
for(var i=0,keys = Object.keys(obj),len=keys.length;i<len;i++){
if(typeof obj[keys[i]] === 'undefined'){
delete obj[keys[i]];
}
}
추없음 없음hasOwnProperty
는 확이필니다합으로 합니다.Object.keys
프토타 체로조않회의고반의 합니다.obj
.
언급URL : https://stackoverflow.com/questions/25421233/javascript-removing-undefined-fields-from-an-object
'programing' 카테고리의 다른 글
Google App Engine Flexible env 가격 책정, $500 교육 (0) | 2023.07.29 |
---|---|
아이폰/아이패드 앱 코드 난독화 - 가능한가?그럴 가치가 있나요? (0) | 2023.07.29 |
HTML 테이블에서 열 숨기기/표시 (0) | 2023.07.24 |
PHP로 \r\n 바꾸기 (0) | 2023.07.24 |
기본값이 아닌 NLS_NUMERIC_CHARACHARTS를 사용하여 Oracle PL/SQL에서 텍스트를 숫자로 효율적으로 변환하는 방법은 무엇입니까? (0) | 2023.07.24 |