admin管理员组文章数量:1402807
I have an object whose keys can have have values which can be object, string or array.
const obj = {
key1: 'asdf',
key2: {},
key3: ['a','b','c'],
key4: [],
key5: '',
}
I have to filter all the keys which are empty i.e empty objects, empty array or empty string.
Is there any other way than writing conditions based on typeof
of keys and then checking null ?
I have an object whose keys can have have values which can be object, string or array.
const obj = {
key1: 'asdf',
key2: {},
key3: ['a','b','c'],
key4: [],
key5: '',
}
I have to filter all the keys which are empty i.e empty objects, empty array or empty string.
Is there any other way than writing conditions based on typeof
of keys and then checking null ?
4 Answers
Reset to default 6Simply use Object.keys()
if (Object.keys(something).length) console.log("Not empty");
This works for all of strings, arrays, and of course, objects.
You can check the Object.keys documentation for more details, specifically, the examples section and the non-object coercion section, which state:
// simple array const arr = ['a', 'b', 'c']; console.log(Object.keys(arr)); // console: ['0', '1', '2'] // array-like object const obj = { 0: 'a', 1: 'b', 2: 'c' }; console.log(Object.keys(obj)); // console: ['0', '1', '2']
and
In ES5, if the argument to this method is not an object (a primitive), then it will cause a TypeError.
From ES2015 onwards, a non-object argument will be coerced to an object.
// In ES5 Object.keys('foo'); // TypeError: "foo" is not an object // In ES2015+ Object.keys('foo'); // ["0", "1", "2"]
For empty strings simple pare the property to ""
.
paring for empty objects and empty arrays can be done using paring the Object.keys
of the property length pared to 0.
const obj = {
key1: 'asdf',
key2: {},
key3: ['a','b','c'],
key4: [],
key5: '',
}
function filterObject(obj) {
for (var propName in obj) {
if (obj[propName] === "" || Object.keys(obj[propName]).length === 0) {
delete obj[propName];
}
}
return obj;
}
console.log(filterObject(obj));
You can easily achieve the result using Object.keys and reduce
Loop over the keys
of object obj
using Object.keys
and set the properties of new object only if it is not empty
You can check for the type of value using typeof
operator
1) string
: typeof
will return string
and check for the length
property
2) array
: You can use Array.isArray
and it will return boolean
value whether the object is an array or not
3) object
: You can first get all keys using Object.keys
and then check if there is any property exist on that object or not using length
property
Since, arrays
are object
in JS, so you can directly use
(typeof value === "object" && Object.keys(value).length)
to check where it is an object and if it contain any property or not
You can create a filter as
if (value !== "" && Object.keys(value).length) acc[key] = value;
const obj = {
key1: "asdf",
key2: {},
key3: ["a", "b", "c"],
key4: [],
key5: "",
};
const result = Object.keys(obj).reduce((acc, key) => {
const value = obj[key];
if (value !== "" && Object.keys(value).length) acc[key] = value;
return acc;
}, {});
console.log(result);
const obj = {
key1: 'asdf',
key2: {},
key3: ['a','b','c'],
key4: [],
key5: '',
}
Object.keys(obj).map(dt => {if (!obj[dt].length) delete obj[dt]});
console.log(obj)
本文标签:
版权声明:本文标题:javascript - How to determine if a variable is an empty object, empty array or empty string? - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744315402a2600238.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论