AJAX 요청 후 때때로 내 애플리케이션이 다음과 같은 빈 객체를 반환할 수 있습니다.
var a = {};
해당 여부를 어떻게 확인할 수 있습니까?
질문자 :falmp
AJAX 요청 후 때때로 내 애플리케이션이 다음과 같은 빈 객체를 반환할 수 있습니다.
var a = {};
해당 여부를 어떻게 확인할 수 있습니까?
답변자 : Community Wiki
ECMA 5+ :
// because Object.keys(new Date()).length === 0; // we have to do some additional check obj // null and undefined check && Object.keys(obj).length === 0 && obj.constructor === Object
그러나 이것은 불필요한 배열을 생성한다는 점에 유의하십시오( keys
의 반환 값).
ECMA 5 이전:
function isEmpty(obj) { for(var prop in obj) { if(obj.hasOwnProperty(prop)) { return false; } } return JSON.stringify(obj) === JSON.stringify({}); }
제이쿼리 :
jQuery.isEmptyObject({}); // true
로다쉬 :
_.isEmpty({}); // true
밑줄 :
_.isEmpty({}); // true
Hoek.deepEqual({}, {}); // true
Ext.Object.isEmpty({}); // true
angular.equals({}, {}); // true
R.isEmpty({}); // true
답변자 : Christoph
ECMAScript 5 지원 을 사용할 수 있는 경우 Object.keys()
사용할 수 있습니다.
function isEmpty(obj) { return Object.keys(obj).length === 0; }
ES3 및 이전 버전의 경우 이 작업을 수행하는 쉬운 방법이 없습니다. 속성을 명시적으로 반복해야 합니다.
function isEmpty(obj) { for(var prop in obj) { if(obj.hasOwnProperty(prop)) return false; } return true; }
답변자 : Erik Töyrä Silfverswärd
같은 문제가 있지만 jQuery를 사용하는 사람들 을 위해 jQuery.isEmptyObject를 사용할 수 있습니다.
답변자 : dhruvio
이것은 내가 선호하는 솔루션입니다.
var obj = {}; return Object.keys(obj).length; //returns 0 if empty or an integer > 0 if non-empty
답변자 : Baggz
Underscore.js 를 사용할 수 있습니다.
_.isEmpty({}); // true
답변자 : Kamil Kiełczewski
오늘 2020.01.17, Chrome v79.0, Safari v13.0.4 및 Firefox v72.0에서 macOS High Sierra 10.13.6에 대한 테스트를 수행했습니다. 선택한 솔루션을 위해.
for-in
(A, J, L, M) 기반 솔루션이 가장 빠름JSON.stringify
(B, K) 기반 솔루션은 느립니다.Object
(N) 기반 솔루션도 느립니다.아래 스니펫에는 15가지 솔루션이 있습니다. 컴퓨터에서 성능 테스트를 실행하려면 여기를 클릭하십시오. 이 링크는 2021.07.08 업데이트되었지만 테스트는 원래 여기 에서 수행되었으며 위 표의 결과는 거기에서 가져왔습니다(하지만 지금은 해당 서비스가 더 이상 작동하지 않는 것 같습니다).
var log = (s, f) => console.log(`${s} --> {}:${f({})} {k:2}:${f({ k: 2 })}`); function A(obj) { for (var i in obj) return false; return true; } function B(obj) { return JSON.stringify(obj) === "{}"; } function C(obj) { return Object.keys(obj).length === 0; } function D(obj) { return Object.entries(obj).length === 0; } function E(obj) { return Object.getOwnPropertyNames(obj).length === 0; } function F(obj) { return Object.keys(obj).length === 0 && obj.constructor === Object; } function G(obj) { return typeof obj === "undefined" || !Boolean(Object.keys(obj)[0]); } function H(obj) { return Object.entries(obj).length === 0 && obj.constructor === Object; } function I(obj) { return Object.values(obj).every((val) => typeof val === "undefined"); } function J(obj) { for (const key in obj) { if (hasOwnProperty.call(obj, key)) { return false; } } return true; } function K(obj) { for (var prop in obj) { if (obj.hasOwnProperty(prop)) { return false; } } return JSON.stringify(obj) === JSON.stringify({}); } function L(obj) { for (var prop in obj) { if (obj.hasOwnProperty(prop)) return false; } return true; } function M(obj) { for (var k in obj) { if (obj.hasOwnProperty(k)) { return false; } } return true; } function N(obj) { return ( Object.getOwnPropertyNames(obj).length === 0 && Object.getOwnPropertySymbols(obj).length === 0 && Object.getPrototypeOf(obj) === Object.prototype ); } function O(obj) { return !(Object.getOwnPropertyNames !== undefined ? Object.getOwnPropertyNames(obj).length !== 0 : (function () { for (var key in obj) break; return key !== null && key !== undefined; })()); } log("A", A); log("B", B); log("C", C); log("D", D); log("E", E); log("F", F); log("G", G); log("H", H); log("I", I); log("J", J); log("K", K); log("L", L); log("M", M); log("N", N); log("O", O);
제 답변이 도움이 되었다면 커피를 사주세요 .
답변자 : es cologne
if(Object.getOwnPropertyNames(obj).length === 0){ //is empty }
http://bencollier.net/2011/04/javascript-is-an-object-empty/ 참조
답변자 : Ateszki
JSON.stringify를 사용하는 것은 어떻습니까? 거의 모든 최신 브라우저에서 사용할 수 있습니다.
function isEmptyObject(obj){ return JSON.stringify(obj) === '{}'; }
답변자 : Jonathan Petitcolas
오래된 질문이지만 문제가 있습니다. 객체가 비어 있지 않은지 확인하는 것이 유일한 목적이라면 JQuery를 포함하는 것은 좋은 생각이 아닙니다. 대신 JQuery의 코드를 자세히 살펴보고 다음과 같이 답을 얻을 수 있습니다.
function isEmptyObject(obj) { var name; for (name in obj) { if (obj.hasOwnProperty(name)) { return false; } } return true; }
답변자 : Anish Nair
방금 비슷한 상황에 처했습니다. 저는 JQuery를 사용하고 싶지 않았고 순수 자바스크립트를 사용하여 이 작업을 수행하고 싶었습니다.
그리고 내가 한 것은 다음 조건을 사용하는 것이었고 그것은 나를 위해 일했습니다.
var obj = {}; if(JSON.stringify(obj) === '{}') { //This will check if the object is empty //Code here.. }
같지 않은 경우 다음을 사용하십시오. JSON.stringify(obj) !== '{}'
이 JSFiddle을 확인하십시오
답변자 : download
최신 브라우저를 사용하는 경우 간단한 방법이 있습니다. Object.keys(obj).length == 0
답변자 : davidhadas
Object.keys(obj).length(ECMA 5+에 대해 위에서 제안한 대로)를 사용하면 빈 객체에 대해 10배 더 느립니다! 구식(for...in) 옵션을 유지합니다.
Node, Chrome, Firefox 및 IE 9에서 테스트한 결과 대부분의 사용 사례에서 다음이 분명해졌습니다.
현명한 결과를 얻으려면 다음을 사용하십시오.
function isEmpty(obj) { for (var x in obj) { return false; } return true; }
또는
function isEmpty(obj) { for (var x in obj) { if (obj.hasOwnProperty(x)) return false; } return true; }
Is object empty? 에서 자세한 테스트 결과 및 테스트 코드를 참조하세요.
답변자 : Ashutosh Ranjan
개체 키 수를 확인할 수 있습니다.
if (Object.keys(a).length > 0) { // not empty }
답변자 : Thevs
그냥 해결 방법입니다. 데이터가 없는 경우 서버에서 특별한 속성을 생성할 수 있습니까?
예를 들어:
var a = {empty:true};
그런 다음 AJAX 콜백 코드에서 쉽게 확인할 수 있습니다.
확인하는 또 다른 방법:
if (a.toSource() === "({})") // then 'a' is empty
편집 : JSON 라이브러리 (fe JSON.js)를 사용하는 경우 JSON.encode() 함수를 시도하고 빈 값 문자열에 대해 결과를 테스트할 수 있습니다.
답변자 : Vikrant
Object.entries() 에 대한 ES2017 사양에 따라 최신 브라우저를 사용하면 확인이 간단합니다.
Object.entries({}).length === 0
답변자 : Slava Fomin II
객체가 비어 있는지 확인하는 완전한 함수를 만들었습니다.
가능한 경우 ECMAScript 5 (ES5) 기능의 Object.keys
를 사용 하여 최상의 성능(호환성 표 참조)을 달성하고 이전 엔진(브라우저)에 가장 호환되는 접근 방식으로 대체합니다.
/** * Returns true if specified object has no properties, * false otherwise. * * @param {object} object * @returns {boolean} */ function isObjectEmpty(object) { if ('object' !== typeof object) { throw new Error('Object must be specified.'); } if (null === object) { return true; } if ('undefined' !== Object.keys) { // Using ECMAScript 5 feature. return (0 === Object.keys(object).length); } else { // Using legacy compatibility mode. for (var key in object) { if (object.hasOwnProperty(key)) { return false; } } return true; } }
이 코드 의 요지 는 다음과 같습니다.
그리고 여기에 데모와 간단한 테스트가 포함된 JSFiddle이 있습니다.
나는 그것이 누군가를 도울 수 있기를 바랍니다. 건배!
답변자 : NiKo
내 테이크:
function isEmpty(obj) { return Object.keys(obj).length === 0; } var a = { a: 1, b: 2 } var b = {} console.log(isEmpty(a)); // false console.log(isEmpty(b)); // true
모든 브라우저가 현재 Object.keys()
구현하는 것은 아니라고 생각합니다.
답변자 : kiranvj
나는 이것을 사용하고 있다.
function isObjectEmpty(object) { var isEmpty = true; for (keys in object) { isEmpty = false; break; // exiting since we found that the object is not empty } return isEmpty; }
예:
var myObject = {}; // Object is empty var isEmpty = isObjectEmpty(myObject); // will return true; // populating the object myObject = {"name":"John Smith","Address":"Kochi, Kerala"}; // check if the object is empty isEmpty = isObjectEmpty(myObject); // will return false;
업데이트
또는
isEmptyObject의 jQuery 구현을 사용할 수 있습니다.
function isEmptyObject(obj) { var name; for (name in obj) { return false; } return true; }
답변자 : ikettu
function isEmpty(obj) { for(var i in obj) { return false; } return true; }
답변자 : GibboK
다음 예제는 JavaScript 객체가 비어 있는지 테스트하는 방법을 보여줍니다. 비어 있다는 것은 자체 속성이 없다는 의미입니다.
스크립트는 ES6에서 작동합니다.
const isEmpty = (obj) => { if (obj === null || obj === undefined || Array.isArray(obj) || typeof obj !== 'object' ) { return true; } return Object.getOwnPropertyNames(obj).length === 0; }; console.clear(); console.log('-----'); console.log(isEmpty('')); // true console.log(isEmpty(33)); // true console.log(isEmpty([])); // true console.log(isEmpty({})); // true console.log(isEmpty({ length: 0, custom_property: [] })); // false console.log('-----'); console.log(isEmpty('Hello')); // true console.log(isEmpty([1, 2, 3])); // true console.log(isEmpty({ test: 1 })); // false console.log(isEmpty({ length: 3, custom_property: [1, 2, 3] })); // false console.log('-----'); console.log(isEmpty(new Date())); // true console.log(isEmpty(Infinity)); // true console.log(isEmpty(null)); // true console.log(isEmpty(undefined)); // true
답변자 : Tudor Morar
나는 적어도 하나의 키가 있는지 확인하러 갈 것입니다. 그것이 비어 있지 않다고 말하는 것으로 충분할 것입니다.
Boolean(Object.keys(obj || {})[0]) // obj || {} checks for undefined
답변자 : Anton Danilchenko
jQuery에는 이 경우에 대해 isEmptyObject()
jQuery.isEmptyObject({}) // true jQuery.isEmptyObject({ foo: "bar" }) // false
답변자 : ahmadalibaloch
후드 아래에서 모든 라이브러리의 모든 빈 검사 방법은 객체 키 검사 논리를 사용합니다. 그것을 이해할 수 있게 만드는 이상한 방법은 여기 에 설명된 방법에 넣을 수 있습니다.
for(key in obj){ //your work here. break; }
ES5 에서 발전된 기능은 이제 객체를 매개변수로 Object.Keys
메서드를 사용하여 객체의 키 길이를 간단히 확인할 수 있습니다.
if(Object.keys(obj).length > 0){ //do your work here }
또는 Lodash 를 사용하는 경우(반드시 사용해야 함).
_.isEmpty(obj) //==true or false
답변자 : iman
jQuery 또는 다른 라이브러리를 사용하지 않은 이 간단한 코드를 사용할 수 있습니다.
var a=({}); //check is an empty object if(JSON.stringify(a)=='{}') { alert('it is empty'); } else { alert('it is not empty'); }
JSON 클래스와 해당 함수( parse 및 stringify )는 매우 유용하지만 IE7 에는 이 간단한 코드 http://www.json.org/js.html로 해결할 수 있는 몇 가지 문제가 있습니다.
다른 간단한 방법(가장 간단한 방법):
jQuery 또는 JSON 객체를 사용하지 않고 이 방법을 사용할 수 있습니다.
var a=({}); function isEmptyObject(obj) { if(typeof obj!='object') { //it is not object, so is not empty return false; } else { var x,i=0; for(x in obj) { i++; } if(i>0) { //this object has some properties or methods return false; } else { //this object has not any property or method return true; } } } alert(isEmptyObject(a)); //true is alerted
답변자 : DiegoAraujo
내가 찾은 가장 좋은 방법:
function isEmpty(obj) { if (!obj) { return true; } if (!(typeof(obj) === 'number') && !Object.keys(obj).length) { return true; } return false; }
작동 대상:
t1: {} -> true t2: {0:1} -: false t3: [] -> true t4: [2] -> false t5: null -> true t6: undefined -> true t7: "" -> true t8: "a" -> false t9: 0 -> true t10: 1 -> false
답변자 : jichi
jQuery와 웹 브라우저를 사용할 수 없는 경우 underscore.js에 isEmpty 함수도 있습니다.
_.isEmpty({}) // returns true
또한 입력 매개변수를 개체로 가정하지 않습니다. 목록이나 문자열 또는 정의되지 않은 경우에도 정답이 됩니다.
답변자 : Jesse
정답은 다음과 같습니다.
const isEmptyObject = obj => Object.getOwnPropertyNames(obj).length === 0 && Object.getOwnPropertySymbols(obj).length === 0 && Object.getPrototypeOf(obj) === Object.prototype;
이것은 다음을 확인합니다.
Object.prototype
입니다. {}
생성된 객체와 구별할 수 없습니다.
답변자 : Dohd
더 간단한 솔루션: var a = {};
a가 비어 있는 경우 : !Object.keys(a).length
는 true
반환합니다.
답변자 : Fábio BC Souza
2021년 - 솔루션
필요한 것은 Object.entries(obj).length
입니다. 네이티브 프로토타입에서 만지는 것은 좋지 않습니다.
자신만의 기능을 만들고 원하는 대로 사용할 수 있습니다. 제 경우에는 다음과 같은 모듈 정의가 있는 utils
utils/isEmpty.js
export default (obj) => !Object.entries(obj).length
someFileToUse.js
import isEmpty from '~/utils/isEmpty.js' const obj1 = {}; const obj2 = {somekey: "someValue"}; console.log(isEmpty(obj1)) // -> true console.log(isEmpty(obj2)) // -> false
답변자 : starikovs
Thevs 답변 외에도 :
var o = {}; alert($.toJSON(o)=='{}'); // true var o = {a:1}; alert($.toJSON(o)=='{}'); // false
jquery + jquery.json입니다.
출처 : Here
출처 : http:www.stackoverflow.com/questions/679915/how-do-i-test-for-an-empty-javascript-object">
더미에서 양말을 효율적으로 페어링하려면 어떻게 해야 합니까? (0) | 2021.09.26 |
---|---|
Git을 사용하여 마지막 X 커밋을 함께 스쿼시 (0) | 2021.09.26 |
SQL Server의 SELECT에서 어떻게 업데이트합니까? (0) | 2021.09.26 |
새 로컬 분기를 원격 Git 리포지토리로 푸시하고 추적하려면 어떻게 해야 합니까? (0) | 2021.09.26 |
열거형을 열거하는 방법 (0) | 2021.09.26 |