programing

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

newsource 2023. 7. 29. 08:29

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