我有一个对象,它的键可以有对象、字符串或数组的值。
const obj = {
key1: 'asdf',
key2: {},
key3: ['a','b','c'],
key4: [],
key5: '',
}
我必须过滤掉所有为空的键,即空对象、空数组或空字符串。
除了编写基于键的typeof
的条件并检查null之外,还有其他方法吗?
我有一个对象,它的键可以有对象、字符串或数组的值。
const obj = {
key1: 'asdf',
key2: {},
key3: ['a','b','c'],
key4: [],
key5: '',
}
我必须过滤掉所有为空的键,即空对象、空数组或空字符串。
除了编写基于键的typeof
的条件并检查null之外,还有其他方法吗?
只需使用 Object.keys()
if (Object.keys(something).length) console.log("Not empty");
这适用于所有字符串、数组以及当然也包括对象。
您可以查看Object.keys文档了解更多详细信息,特别是示例部分和非对象强制转换部分,其中指出:
// 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"]
对于空字符串,只需将属性与""
进行简单比较即可。
要比较空对象和空数组,可以使用比较属性长度的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 和 reduce 轻松地实现结果
使用 Object.keys
循环遍历对象 obj
的 keys
,仅在其不为空时设置新对象的属性
您可以使用 typeof
运算符检查值的类型
1) string
: typeof
将返回 string
并检查 length
属性
2) array
: 您可以使用 Array.isArray
,它将返回一个布尔值,指示对象是否为数组
3) object
: 您可以首先使用 Object.keys
获取所有键,然后使用 length
属性检查该对象上是否存在任何属性
由于在JS中,数组
是一个对象
,因此您可以直接使用它们。
(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);
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)