Javascript-개체에서 정의되지 않은 필드 제거
이 질문에 이미 답변이 있습니다.
- Javascript의 개체에서 빈 속성 제거 31 답변
개체에서 정의되지 않은 필드를 제거하는 깨끗한 방법이 있습니까?
즉
> 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 화살표 기능과 삼항 연산자를 사용하는 한 줄짜리 :
Object.keys(obj).forEach(key => obj[key] === undefined ? delete obj[key] : '');
또는 삼항 대신 단락 평가를 사용하십시오 : (@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) => {
Object.keys(obj).forEach(key => {
if (obj[key] && typeof obj[key] === 'object') removeEmpty(obj[key]);
else if (obj[key] === undefined) delete obj[key];
});
return obj;
};
var obj = { a: 1, b: undefined, c: 3 }
undefined
객체에서 소품 을 제거하려면 다음 과 같이 사용합니다.
JSON.parse(JSON.stringify(obj));
산출: {a: 1, c: 3}
나는 Lodash와 같은 것을 선호합니다.
import { pickBy, identity } from 'lodash'
const cleanedObject = pickBy(originalObject, identity)
식별 기능은 정당 x => x
하며 그 결과는 모든 거짓 값에 대해 거짓이 됩니다 . 그래서 이것은 undefined, "", 0, null, ...을 제거합니다.
undefined
값만 제거 하려는 경우 다음 을 수행 할 수 있습니다.
const cleanedObject = pickBy(originalObject, v => v !== undefined)
그것은 당신에게 새로운 객체를 제공하는데, 이것은 일반적으로 다른 답변 중 일부가 제안하는 것처럼 원래 객체를 변형하는 것보다 바람직합니다.
이 솔루션은 피할 수 hasOwnProperty()
로 Object.keys가 지정된 객체의 자신의 열거 속성의 배열을 반환합니다.
Object.keys(obj).forEach(function (key) {
if(typeof obj[key] === 'undefined'){
delete obj[key];
}
});
이를 추가 null
하거나 ''
더 엄격한 청소를 위해 추가 할 수 있습니다 .
언급되지 않은 것 같기 때문에 내가 선호하는 방법, 부작용 또는 외부 종속성이 없습니다.
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}
This one is easy to remember, but might be slow. Use jQuery to copy non-null properties to an empty object. No deep copy unless you add true
as first argument.
myObj = $.extend({}, myObj);
Here's a plain javascript (no library required) solution:
function removeUndefinedProps(obj) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop) && obj[prop] === undefined) {
delete obj[prop];
}
}
}
Working demo: http://jsfiddle.net/jfriend00/djj5g5fu/
Mhh.. I think @Damian asks for remove undefined field (property) from an JS object
. Then, I would simply do :
for (const i in myObj)
if (typeof myObj[i] === 'undefined')
delete myObj[i];
Short and efficient solution, in (vanilla) JS ! Example :
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);
Another Javascript Solution
for(var i=0,keys = Object.keys(obj),len=keys.length;i<len;i++){
if(typeof obj[keys[i]] === 'undefined'){
delete obj[keys[i]];
}
}
No additional hasOwnProperty
check is required as Object.keys
does not look up the prototype chain and returns only the properties of obj
.
One could also use the JQuery filter for objects
var newobj = $(obj).filter(function(key) {
return $(this)[key]!== undefined;
})[0];
Demo here
ReferenceURL : https://stackoverflow.com/questions/25421233/javascript-removing-undefined-fields-from-an-object
'programing tip' 카테고리의 다른 글
Cakephp에 대한 완전한 현재 URL을 얻는 방법 (0) | 2021.01.09 |
---|---|
LINQ를 통해 시간없이 DateTime을 비교하는 방법은 무엇입니까? (0) | 2021.01.09 |
별도의 창에서 크롬 디버거를 열 수 있습니까? (0) | 2021.01.09 |
Python UnicodeDecodeError-인코딩을 오해하고 있습니까? (0) | 2021.01.09 |
헤더가 그대로있는 Python을 사용하여 CSV 파일을 가져 오는 방법 (첫 번째 열이 숫자가 아닌 열임) (0) | 2021.01.09 |