返回
用JS优雅处理扁平化和去重:一道面试题引发的思考
前端
2023-10-03 23:35:48
在一次面试中,一道看似简单的题目引发了深入的思考,它考察了 JavaScript 开发者处理扁平化、排序和去重操作的能力。
本题要求使用尽可能少的代码,最好在五行以内,优雅地处理这三个操作。这道题不仅考验了算法基础,还要求运用函数式编程的技巧,以实现简洁高效的解决方案。
扁平化、排序、去重
扁平化是指将多维数组转化为一维数组。排序是指将数组中的元素按照特定规则进行排列。去重是指移除数组中的重复元素。
扁平化:
使用 flat
方法,可直接将多维数组扁平化为一维数组:
const flattened = arr.flat();
排序:
使用 sort
方法,可将数组按照元素的 Unicode 代码点进行排序:
const sorted = arr.sort();
去重:
使用 Set
对象,可轻松移除重复元素:
const unique = [...new Set(arr)];
优雅的解决方案
将这三个操作结合起来,我们可以使用函数式编程的 map
、reduce
和 filter
方法:
const processed = arr
.map(item => Array.isArray(item) ? item.flat() : item) // 扁平化
.reduce((acc, item) => acc.concat(item), []) // 合并
.sort() // 排序
.filter((item, i, arr) => arr.indexOf(item) === i); // 去重
代码说明
首先,我们使用 map
方法对数组的每个元素进行扁平化处理。如果是嵌套数组,则将其扁平化,否则直接返回元素。
然后,使用 reduce
方法将处理后的数组合并成一个一维数组。
接着,使用 sort
方法对合并后的数组进行排序。
最后,使用 filter
方法对排序后的数组进行去重,仅保留不重复的元素。
总结
这个简洁优雅的解决方案展示了 JavaScript 在处理复杂数据结构方面的强大功能。它不仅满足了面试题的要求,还突出了函数式编程在现代 Web 开发中的优势。通过理解扁平化、排序和去重操作的基本原理,以及如何利用 JavaScript 的函数式特性,我们可以编写出高效可维护的代码。