每天学习10个实用Javascript代码片段,加深对 Javascript 语法的理解,积累代码优化经验,第四天继续,如果觉得内容能够带来点帮助,可以查看专栏《碎片时间学习Javascript代码》其他内容,又或者有用到的需求片段,不妨在留言区留言。
1. intersection
此代码片段用于返回两个数组的交集,之前在文章《JavaScript中的Set数据操作:交集、差集、交集、对称差集》中介绍过使用 Set 获取两个集合的交集。
const intersection = (arrayA, arrayB) => arrayA.filter((item) => arrayB.includes(item)); const array1 = [1, 2, 3, 4]; const array2 = [3, 4, 5, 6]; console.log(intersection(array1, array2)); // [ 3, 4 ]
一个严谨掘友评论没有去重,感谢,下面的代码增加去重机制。此方法不是求数组交集的最佳方式!
const intersection = (arrayA, arrayB) => [ ...new Set(arrayA.filter((item) => arrayB.includes(item))), ]; const array1 = [1, 3, 5, 3, 3]; const array2 = [2, 4, 6, 3]; console.log(intersection(array1, array2)); // [ 3 ]
2. sum
此代码片段用于计算数组各元素的总和。
const sum = (...array) => [...array].reduce((acc, current) => acc + current, 0); const testArray = [1, 2, 3, 4, 5]; console.log(sum(1, 2, 3, 4, 5)); // 15 console.log(sum(...testArray)); // 15
3. timeTaken
此代码片段用于计算执行函数所需的时间。
const timeTaken = (callback) => { console.time("执行时间:"); const result = callback(); console.timeEnd("执行时间:"); return result; }; timeTaken(() => Math.pow(10, 20)); // 执行时间:: 0.094ms
4. average
此代码片段使用扩展运算符 (...
) 和数组中的 reduce
方法来返回两个给定数字或数组的平均值。
const average = (...numbers) => numbers.reduce((acc, current) => acc + current, 0) / numbers.length; const testArray1 = [1, 2, 3, 4, 5]; console.log(average(...testArray1)); // 3 console.log(average(1, 2, 3, 4, 5)); // 3
5. powersetArray
此代码片段返回一个数字数组的幂集,使用 reduce
、map
和 concat
方法实现数组的组合方式。
const powersetArray = (array) => array.reduce( (acc, current) => acc.concat(acc.map((item) => [current].concat(item))), [[]] ); console.log(powersetArray([3, 4, 5])); console.log(powersetArray([1, 2])); /* [ [], [ 3 ], [ 4 ], [ 4, 3 ], [ 5 ], [ 5, 3 ], [ 5, 4 ], [ 5, 4, 3 ] ] [ [], [ 1 ], [ 2 ], [ 2, 1 ] ] */
6. topElements
此代码片段按照从大到小返回数组的 top
个元素,使用扩展操作符(…
)和数组的 sort
和 slice
方法。如果不提供第二个参数,number
的默认值为1
,默认只返回一个最大元素。
const topElements = (array, count = 1) => [...array].sort((a, b) => b - a).slice(0, count); console.log(topElements([1, 2, 3, 4, 5, 6])); // [ 6 ] console.log(topElements([1, 2, 30, 40, 30], 3)); // [ 40, 30, 30 ]
7. keyValuePairs
此代码片段使用 Object.keys
方法和 map
方法来映射 Object 的键,创建一个键值对数组。
const keyValuePairs = (object) => Object.keys(object).map((key) => [key, object[key]]); console.log(keyValuePairs({ title: "DevPoint", city: "Shenzhen" })); // [ [ 'title', 'DevPoint' ], [ 'city', 'Shenzhen' ] ]
8. isPowerOf2
此代码片段判断一个数是否为 2
的幂次方,使用按位运算符 &
。
const isPowerOf2 = (number) => !!number && (number & (number - 1)) === 0; console.log(isPowerOf2(100)); // false console.log(isPowerOf2(64)); // true
9. bottomVisible
此代码片段检查页面底部是否可见。
const bottomVisible = () => document.documentElement.clientHeight + window.scrollY >= (document.documentElement.scrollHeight || document.documentElement.clientHeight); bottomVisible(); // true
10. createDir
此代码片段使用 existsSync()
来检查目录是否存在,如果不存在则使用 mkdirSync()
创建它。主要用于NodeJs后端编程。
const fs = require("fs"); const createDir = (dir) => !fs.existsSync(dir) ? fs.mkdirSync(dir) : undefined; createDir("cache");