如何从JavaScript数组中删除空对象
作者:迹忆客
从数组中删除空对象:
- 使用
Array.filter()
方法遍历数组。 - 将每个对象传递给
Object.keys()
方法并检查键的长度是否不等于 0。 filter
方法将返回一个不包含空对象的新数组。
const arr = [{}, {id: 1}, {}, {id: 2}, {}]; const results = arr.filter(element => { if (Object.keys(element).length !== 0) { return true; } return false; }); // 👇️ [{id: 1}, {id: 2}] console.log(results);
我们传递给 Array.filter
方法的函数被数组中的每个元素(对象)调用。
如果函数返回真值,则 filter
方法将该元素添加到结果数组。
Object.keys
方法返回一个包含对象键的数组。
console.log(Object.keys({})); // 👉️ [] console.log(Object.keys({id: 1})); // 👉️ ['id']
如果对象没有键值对,则该方法返回一个空数组。
如果它至少有 1 个键值对,我们只返回 true 并将对象添加到结果数组。
请注意 ,如果使用空数组
[]
或数字 0 调用Object.keys(obj).length
方法将返回 0。
console.log(Object.keys(0).length); // 👉️ 0 console.log(Object.keys([]).length); // 👉️ 0
如果我们的数组包含对象以外的类型,请使用以下方法仅从数组中删除空对象。
const arr = [{}, {id: 1}, 'a', 0, {}, []]; const results = arr.filter(element => { if ( typeof element === 'object' && !Array.isArray(element) && Object.keys(element).length === 0 ) { return false; } else { return true; } }); // 👇️ [{id: 1}, 'a', 0, []] console.log(results);
我们使用 &&
(与)运算符来指定必须满足所有条件才能运行 if 块。
我们首先检查元素是否有对象类型,但这还不够,因为 JavaScript 数组也有对象类型。
console.log(typeof []) // 👉️ 'object'
然后我们检查元素不是数组并且对象是空的。
如果满足所有这些条件,我们就知道我们有一个空对象,不应将其添加到结果数组中,因此我们返回 false。
在所有其他情况下,数组元素不是空对象并被添加到新数组中。
大多数情况下,在数组中存储多种不同类型是一种反模式。 如果我们需要在同一个数组中存储不同的类型,很可能是做错了什么。
补充:特殊位置删除
当我们只是需要删除数组的首尾数据的时候,也可以通过js的pop或者shift方法实现,这其实是两对对应的操作:添加与删除。
push 与pop
通过push我们可以将元素添加到数组末尾,通过pop将末尾元素去除并返回。
const arr = [1, 2, 3, 4, 5, 6] // 添加元素到数组末尾 arr.push(7) // arr: [1, 2, 3, 4, 5, 6, 7] // 取出数组末尾元素并返回 const pop_res = arr.pop() // arr: [1, 2, 3, 4, 5, 6], pop_res: 7
unshift与shift
通过unshift可以将元素添加到数组首部,通过shift可去除数组头部元素并返回。
// 将元素添加到数组开头 arr.unshift(0) // arr: [0, 1, 2, 3, 4, 5, 6] // 取出数组开头元素并返回 const sft_res = arr.shift() // arr: [1, 2, 3, 4, 5, 6], sft_res = 0
总结
到此这篇关于如何从JavaScript数组中删除空对象的文章就介绍到这了,更多相关JS数组删除空对象内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!