Skip to content

10 个 JavaScript 单行代码

一行代码: 其实就是将多个功能压缩到一行 JavaScript 代码中。

它们可以帮助你写出更紧凑的代码,有时甚至能提升代码可读性。

好处多多: 节省时间、写出更简洁的代码,甚至还能让其他开发者刮目相看(仅仅一点点而已)。

1. 数组过滤

假设你有一组测试分数,需要找出所有 A 等级(在本例中是偶数)的分数。一行代码来帮忙!

js
const scores = [85, 92, 73, 98, 80];
const evenScores = scores.filter(num => num % 2 === 0);

// evenScores 将是 [92, 98, 80]

这段代码使用了 filter 方法,它会创建一个新数组,其中只包含满足特定条件的元素。

箭头函数 (num => num % 2 === 0) 用于检查每个数字是否为偶数。

什么时候使用: 过滤掉数组中不需要的元素是一项常见的操作。这个一行代码技巧可以帮助你保持数据干净整洁。

2. 数组映射

如果你有一组边长,想要计算每个正方形的面积,一行代码就能将数组中的每个元素映射(转换)为其平方:

js
const sideLengths = [5, 3, 7];
const areas = sideLengths.map(num => num * num);

// areas 将是 [25, 9, 49]

map 方法会创建一个新数组,其中包含对原始数组中每个元素调用指定函数后的结果。

在本例中,函数用于对每个数字进行平方运算。

什么时候使用: 这个一行代码技巧可以用于对数组中的每个元素进行数学运算。

3. 展平数组

有时你会遇到嵌套数组,例如一个包含多个变体的商品列表。一行代码可以帮助你将这些结构展平:

js
const nestedGroceries = [
  ["Apples", ["Red", "Green"]],
  ["Milk", ["Whole", "2%"]]
];
const flatGroceries = nestedGroceries.flat();

// flatGroceries 将是 ["Apples", "Red", "Green", "Milk", "Whole", "2%"]

flat 方法(ES6 及更高版本提供)会创建一个新数组,其中包含所有子数组元素,它们被连接在一起。

这可以简化你的数据操作任务。

什么时候使用: 展平嵌套数组可以让你更容易地在一个维度上操作数据。

4. 唯一元素(不允许重复!)

假设你有一个包含重复条目的宾客名单。

一行代码可以帮助你确保每个人都能收到独一无二的邀请函(避免出现尴尬的“等等,我收到两个?”情况)。

js
// 原始宾客名单,包含重复条目
const guestList = ["Alice", "Bob", "Charlie", "Alice"];

// 通过将数组转换为 Set 然后再转换回数组来删除重复项
const uniqueGuestList = [...new Set(guestList)];

// uniqueGuestList 将是 ["Alice", "Bob", "Charlie"]
console.log(uniqueGuestList);

这个一行代码技巧利用了 Set 的神奇之处。Set 存储的是唯一的值。

我们使用展开运算符 (...) 将包含原始列表中唯一宾客的 Set 的元素重新展开到一个新数组中。

什么时候使用: 数据清理通常意味着从数组中删除重复项。这个一行代码技巧可以帮助你保持数据干净整洁。

5. 简写条件语句

你是否曾经写过跨越多行的 if...else 语句,只是为了根据条件分配一个值?其实可以更简洁:

js
// 定义用户的年龄
const age = 18;

// 根据用户的年龄确定消息
const message = age >= 18 ? "Welcome!" : "Sorry, not yet.";

// 输出消息
console.log(message);

这段代码使用了三元运算符,它是一种简洁的 if-else 语句,可以写在一行代码中。

会检查条件 (age >= 18),并将相应的值("Welcome!" 或 "Sorry, not yet.")分配给 message 变量。

什么时候使用: 简写条件语句非常适合根据情况执行简单的分配操作,同时保持代码整洁高效。

6. 字符串反转

一行代码甚至可以用于处理文本!如何反转一个字符串,看看它是否是回文(一个正着读和倒着读都一样的单词,例如 "racecar")?

js
const str = "Hello, world!";
const reversedStr = str.split('').reverse().join('');

// reversedStr 将是 "!dlrow ,olleH"

这个一行代码技巧将字符串拆分为字符数组,反转元素顺序,然后将它们重新连接成一个新字符串——所有操作都包含在一行代码中!

什么时候使用: 字符串操作任务,例如反转字符串或提取子字符串,可以使用一行代码来简化。

7. 对象属性是否存在

想象一下,你正在创建一个用户配置文件系统,需要确定用户对象中是否存在特定属性(例如 "email")。这个一行代码技巧可能会有所帮助:

js
const user = { name: "Alice", age: 30 };

// 检查用户对象是否具有 'email' 属性
const hasEmail = "email" in user;

// hasEmail 将是 false,因为用户对象中不存在 'email' 属性

in 运算符用于检查对象中是否存在某个属性。在本例中,我们检查用户对象中是否存在 "email" 属性。

什么时候使用: 根据对象中指定属性的可用性验证数据是日常工作。这个一行代码技巧提供了一个简单的解决方案。

8. 默认参数值

如何创建一个向用户问好的操作,但在没有提供姓名时提供一个备用值?一行代码可以处理这种情况:

js
const greet = (name = "Guest") => `Hello, ${name}!`;
console.log(greet());

// 输出:Hello, Guest!

console.log(greet("Bob"));
// 输出:Hello, Bob!

这个一行代码技巧使用了 ES6 默认参数。在本例中,如果在调用 greet 函数时没有提供姓名,则使用默认值 "Guest"

什么时候使用: 默认参数可以避免在函数调用时没有提供正确参数时出现错误,从而使你的代码更健壮。

9. 紧凑数组

有时你会遇到包含空值或 null 元素的数组。一行代码可以帮助你删除这些不需要的元素:

js
const numbers = [1, 0, null, 3]; // 原始数组
const compactNumbers = numbers.filter(Boolean); // 使用 Boolean 作为回调函数来使用 filter 方法

// compactNumbers 将是 [1, 3],因为 Boolean(1) 是 true,Boolean(0) 是 false,Boolean(null) 是 false,Boolean(3) 是 true

这个一行代码技巧再次使用了 filter 方法。但是,这次,过滤器使用 Boolean 构造函数检查“假值”(例如 null、undefined、0、"" 和 NaN)。

任何评估为 false 的元素都将从新数组中排除。

什么时候使用: 清理数组以删除不需要的元素可以确保你处理的是重要的数据。

10. 动态对象键

一行代码甚至可以用来构建键在操作后才确定的对象。不可思议吧?

js
const prop = "score";
const person = { [prop]: 90 };

// person 将是 {score: 90}

这个一行代码技巧使用了计算属性名。在创建对象时,使用 prop 变量的值作为花括号内的键名。

这允许根据变量或表达式动态创建键。

什么时候使用: 动态对象键对于创建结构没有预先设定的东西非常有用。

请记住

虽然很酷,但用于动态键生成的更高级的一行代码可能会影响可读性。请谨慎使用!