JavaScript 列表推導是一種非常方便的語法,它可以處理一些比較復雜的數據操作,使得代碼更加簡潔易讀。它在 Python 中也有類似的語法,被稱為 List Comprehension。下面我們來詳細了解 JavaScript 列表推導。
列表推導顧名思義就是從一個列表中快速推導出另一個列表。比如我們需要在一個數組中找到所有的偶數并將其平方,使用列表推導可以很容易的實現:
const nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const evenSquares = [num * num for (num of nums) if (num % 2 === 0)];
console.log(evenSquares); // [4, 16, 36, 64, 100]
上面的代碼中,我們定義了一個數組 nums,然后使用列表推導式找到了所有的偶數,并將其平方存放在了 evenSquares 數組中。列表推導式的結構是 [表達式 for 變量 of 列表 if 條件],也就是“變量 of 列表”表示循環,if 條件表示篩選,表達式表示計算。
下面我們再來看一些其他的例子,來更好的理解列表推導。
獲取數組中的所有字符串的長度:const strs = ['hello', 'world', 'test', 'hello world'];
const strLengths = [str.length for (str of strs) if (typeof str === 'string')];
console.log(strLengths); // [5, 5, 4, 11]
上面的代碼中,我們定義了一個數組 strs,然后使用列表推導式找到了所有的字符串,并獲取了它們的長度存放在了 strLengths 數組中。
獲取數組中所有最大值:const nestedArr = [[1, 2, 3], [4, 5], [6, 7, 8, 9]];
const maxValues = [Math.max(...arr) for (arr of nestedArr)];
console.log(maxValues); // [3, 5, 9]
在上面的代碼中,我們定義了一個嵌套數組 nestedArr,然后使用列表推導式在每個子數組中找到了最大值,并將其存放在 maxValues 數組中。
另外,列表推導也可以使用嵌套的循環,以此從多個列表中快速推導出新的列表。比如我們需要從兩個數組中獲取所有的組合:const colors = ['red', 'blue', 'green'];
const sizes = ['small', 'medium', 'large'];
const combinations = [[color, size] for (color of colors) for (size of sizes)];
console.log(combinations);
// [
// ['red', 'small'], ['red', 'medium'], ['red', 'large'],
// ['blue', 'small'], ['blue', 'medium'], ['blue', 'large'],
// ['green', 'small'], ['green', 'medium'], ['green', 'large']
// ]
上面的代碼中,我們定義了兩個數組 colors 和 sizes,然后使用兩個循環嵌套,快速從兩個數組中獲取了所有的組合并存放在了 combinations 數組中。
綜上,JavaScript 列表推導是一個非常方便的語法,在處理一些復雜的數據結構操作時,能夠使代碼更加簡潔易讀。同時,列表推導也支持嵌套的循環,可以使用 if 條件快速篩選出需要的數據,讓開發更加高效。