如何判断一个变量是空对象、空数组还是空字符串?
How to determine if a variable is an empty object, empty array or empty string?
我有一个对象,它的键值可以是对象、字符串或数组。
const obj = {
key1: 'asdf',
key2: {},
key3: ['a','b','c'],
key4: [],
key5: '',
}
我必须过滤所有空键,即空对象、空数组或空字符串。
除了根据 typeof
个键写条件然后检查 null 之外,还有其他方法吗?
您可以使用 Object.keys and reduce
轻松获得结果
使用 Object.keys
遍历对象 obj
的 keys
并仅在新对象不为空时设置新对象的属性
您可以使用 typeof
运算符
检查值的类型
1) string
: typeof
将 return string
并检查 length
属性
2) array
:可以使用Array.isArray
,它会return boolean
判断对象是否是一个是否数组
3) object
: 你可以先用Object.keys
得到所有的key,然后检查上面是否有属性存在对象或不使用 length
属性
由于arrays
在JS中是object
,所以可以直接使用
(typeof value === "object" && Object.keys(value).length)
检查它在哪里是一个对象以及它是否包含任何 属性 或不
您可以创建过滤器为
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);
对于空字符串,简单比较 属性 和 ""
。
比较空对象和空数组可以通过比较 属性 长度的 Object.keys
与 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));
只需使用 Object.keys()
if (Object.keys(something).length) console.log("Not empty");
这适用于所有字符串、数组,当然还有对象。
您可以查看 Object.keys 文档以获取更多详细信息,特别是 examples section and the non-object coercion 部分,其中声明:
// 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']
和
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"]
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)
我有一个对象,它的键值可以是对象、字符串或数组。
const obj = {
key1: 'asdf',
key2: {},
key3: ['a','b','c'],
key4: [],
key5: '',
}
我必须过滤所有空键,即空对象、空数组或空字符串。
除了根据 typeof
个键写条件然后检查 null 之外,还有其他方法吗?
您可以使用 Object.keys and reduce
轻松获得结果使用 Object.keys
遍历对象 obj
的 keys
并仅在新对象不为空时设置新对象的属性
您可以使用 typeof
运算符
1) string
: typeof
将 return string
并检查 length
属性
2) array
:可以使用Array.isArray
,它会return boolean
判断对象是否是一个是否数组
3) object
: 你可以先用Object.keys
得到所有的key,然后检查上面是否有属性存在对象或不使用 length
属性
由于arrays
在JS中是object
,所以可以直接使用
(typeof value === "object" && Object.keys(value).length)
检查它在哪里是一个对象以及它是否包含任何 属性 或不
您可以创建过滤器为
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);
对于空字符串,简单比较 属性 和 ""
。
比较空对象和空数组可以通过比较 属性 长度的 Object.keys
与 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));
只需使用 Object.keys()
if (Object.keys(something).length) console.log("Not empty");
这适用于所有字符串、数组,当然还有对象。
您可以查看 Object.keys 文档以获取更多详细信息,特别是 examples section and the non-object coercion 部分,其中声明:
// 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']
和
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"]
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)