programing tip

Javascript-개체에서 정의되지 않은 필드 제거

itbloger 2021. 1. 9. 09:34
반응형

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 화살표 기능과 삼항 연산자를 사용하는 한 줄짜리 :

Object.keys(obj).forEach(key => obj[key] === undefined ? delete obj[key] : '');

또는 삼항 대신 단락 평가를 사용하십시오 : (@Matt Langlois, 정보 감사합니다!)

Object.keys(obj).forEach(key => obj[key] === undefined && delete obj[key])

jsbin

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;
};

jsbin


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.

DEMO


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

반응형