《Favorite JavaScript utilities in single line of code! No more!》笔记

优雅的一行js代码写法 post地址

Array

Array.isArray来判断是否是array

const isArr = Array.isArray(arguments)

array.flatMap

有一个替代 array.map()的方法:array.flatMap()(从ES2019开始可用)。这个方法给了我们映射的能力,但也可以在生成的映射数组中删除甚至添加新的项目。

题目是: 快速生成'笛卡尔积'的数组

题目Create cartesian product

JavaScript version

const cartesian = (...sets) => sets.reduce((acc, set) => acc.flatMap((x) => set.map((y) => [...x, y])), [[]]);

Example

cartesian([1, 2], [3, 4]); // [ [1, 3], [1, 4], [2, 3], [2, 4] ]
/*       3       4  
      ---------------
1  |  [1, 3]  [1, 4]  |
2  |  [2, 3]  [2, 4]
*/

判断两个数组是否内容一致(不论数组元素的顺序)

关键是 new Set 和 数组的sort函数

// `a` and `b` are arrays
const isEqual = (a, b) => JSON.stringify([...new Set(a)].sort()) === JSON.stringify([...new Set(b)].sort());

array.lastIndexOf

最后一次出现某个item的判断写法

const lastIndex = (arr, predicate) => arr.reduce((prev, curr, index) => (predicate(curr) ? index : prev), -1);// Orconst lastIndex = (arr, predicate) => arr.map((item) => predicate(item)).lastIndexOf(true);

DOM

判断是否是ie浏览器

const isIE = !!document.documentMode

判断touch events是否支持

const touchSupported = () =>
    'ontouchstart' in window || (window.DocumentTouch && document instanceof window.DocumentTouch)

从一段文本中快速提取出html相关代码

使用 DOMParser

const stripHtml = (html) => new DOMParser().parseFromString(html, 'text/html').body.textContent || ''