_.compact

栏目: Javascript 发布时间:2024-12-27

compact 方法是一个非常实用的工具,用于移除数组中的所有假值(falsy values)。假值在 JavaScript 中包括 false0""(空字符串)、nullundefinedNaN

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 方法被用来处理一个由用户名组成的数组,但这并不是最佳实践。在实际应用中,你应该直接过滤用户对象,而不是先将它们的某个属性提取出来处理。上面的 compactNamesfilteredUsers 部分只是为了展示 compact 的用法,并不推荐这样使用。

注意事项

  • compact 方法不会改变原始数组,而是返回一个新数组。
  • 如果你需要原地修改数组(即不创建新数组),你可以使用其他方法(如 Array.prototype.filter)结合 compact 的逻辑来实现。

结论

Lodash 的 compact 方法是一个简单而强大的工具,用于移除数组中的所有假值。它可以帮助你清理数据,确保后续处理的数组只包含有效的值。通过掌握 compact 方法,你可以更有效地管理和处理数组数据。

本文地址:https://www.tides.cn/p_js-lodash-compact