_.compact
compact
方法是一个非常实用的工具,用于移除数组中的所有假值(falsy values)。假值在 JavaScript 中包括 false
、0
、""
(空字符串)、null
、undefined
和 NaN
。
compact
方法的基本用法
compact
方法接受一个数组作为参数,并返回一个新数组,该数组只包含原始数组中的真值(truthy values)。
const arrayWithFalsyValues = [0, 1, false, 2, '', 3, null, undefined, 'Hello', NaN, 4];
const compactArray = _.compact(arrayWithFalsyValues);
console.log(compactArray);
// 输出: [1, 2, 3, 'Hello', 4]
在这个例子中,compact
方法移除了数组中的所有假值,只保留了真值。
compact
方法的参数
array
(必需):要移除假值的数组。
示例:清理数据
compact
方法在清理数据时非常有用,特别是当你从外部源(如用户输入、API 响应等)接收数据时。这些数据可能包含无用的假值,你需要将它们移除以进行后续处理。
const userData = [
{ id: 1, name: 'Alice', age: 25 },
{ id: 2, name: '', age: null },
{ id: 3, name: 'Bob', age: 30 },
{ id: 4, name: undefined, age: NaN },
{ id: 5, name: 'Charlie', age: 35 }
];
// 假设我们只想保留有有效名称的用户
const validUsers = userData.map(user => ({ ...user, name: user.name.trim() })).filter(user => user.name);
// 但是上面的代码有点冗长,我们可以先使用 _.compact 来处理名称数组,然后再过滤用户(这里只是示例,不直接这样用)
// 更实际的做法是直接过滤用户对象,但这里为了展示 compact 的用法,我们模拟一下
const namesOnly = userData.map(user => user.name.trim());
const compactNames = _.compact(namesOnly);
const filteredUsers = userData.filter(user => compactNames.includes(user.name.trim()));
// 但实际上,我们应该直接这样过滤用户:
const actualValidUsers = userData.filter(user => user.name.trim() !== '');
console.log(actualValidUsers);
// 输出: [{ id: 1, name: 'Alice', age: 25 }, { id: 3, name: 'Bob', age: 30 }, { id: 5, name: 'Charlie', age: 35 }]
注意:上面的例子中,compact
方法被用来处理一个由用户名组成的数组,但这并不是最佳实践。在实际应用中,你应该直接过滤用户对象,而不是先将它们的某个属性提取出来处理。上面的 compactNames
和 filteredUsers
部分只是为了展示 compact
的用法,并不推荐这样使用。
注意事项
compact
方法不会改变原始数组,而是返回一个新数组。- 如果你需要原地修改数组(即不创建新数组),你可以使用其他方法(如
Array.prototype.filter
)结合compact
的逻辑来实现。
结论
Lodash 的 compact
方法是一个简单而强大的工具,用于移除数组中的所有假值。它可以帮助你清理数据,确保后续处理的数组只包含有效的值。通过掌握 compact
方法,你可以更有效地管理和处理数组数据。
本文地址:https://www.tides.cn/p_js-lodash-compact