在 JavaScript 中对包含子数组中元素的数组进行排序
在给定的问题陈述中,我们被要求借助 JavaScript 功能对包含子数组中元素的数组进行排序。当我们谈论对任何列表或数组进行排序时,sort() 和 flat 方法很有用。
JavaScript 中的 sort()、flat() 和 isArray() 方法是什么?
让我们了解 JavaScript 中 sort、flat 和 isArray 方法的工作原理。
sort() 方法主要用于对数组的元素进行排序并返回排序后的数组。默认情况下,项目按字典顺序排序。但是我们可以提供一个函数作为参数,以不同的方式对项目进行排序。例如:
input - arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]; arr.sort((a, b) => a - b); // 按升序排列 输出 - [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
flat() 函数用于通过连接子数组来展平数组。默认情况下,它将数组展平为一层深度。但是我们可以提供一个数字来将数组展平到一定深度。例如:
输入 - arr = [1, [2, 3], [4, [5, 6]]]; const flatArr = arr.flat(); 输出 - [1, 2, 3, 4, 5, 6]
isArray() 是一个内置的 javascript 函数。借助此函数,我们可以确定给定的值是否为数组。它给出布尔输出,表明该值是一个数组。例如:
Array.isArray([1, 2, 3]); // true
Array.isArray("hello"); // false
Array.isArray({"name": "John"}); // false
上述问题的逻辑
在 javascript 中对带有子数组的数组中的项进行排序的最简单方法是使用 sort 方法和 flat 方法。
对于在 javascript 中包含子数组中存在的项的数组进行排序,我们可以使用 javascript 的 flat() 方法来展平数组,然后我们可以使用 sort 方法对项进行排序。
在我们的算法中,javascript 的 flat 方法将用于将数组展平为一维数组,sort 方法将按升序对该数组进行排序。如果我们想对子数组本身进行排序而不是展平它们,我们可以使用 map 函数迭代数组项并单独对它们进行排序。
算法 - 第一种方法
步骤 1 − 创建一个包含子数组的数组。
步骤 2 − 定义一个 flatArr 变量并将 flat 方法应用于创建的 arr。
步骤 3 − 展平数组 arr 后,我们现在将使用 sort 方法对数组进行排序。
步骤 4 − 在控制台上显示输出
示例
const arr = [4, 2, [5, 1], 3, [6]];
// 展平数组
const flatArr = arr.flat();
// 对展平数组进行排序
flatArr.sort((a, b) => a - b);
console.log("对子数组中的元素进行排序后");
console.log(flatArr);
输出
对子数组中的元素进行排序后 [ 1, 2, 3, 4, 5, 6 ]
算法 - 第二种方法
步骤 1 - 声明一个名为 flatArr 的空数组
步骤 2 - 定义一个名为 flattenHelper 的辅助方法,该方法以数组为参数并对数组的每个项目执行迭代。
步骤 3 - 如果该项目存在于数组中,则对元素递归调用 flattenHelper 函数。
步骤 4 - 如果元素不存在于数组中,则将其推送到 flatArr。
步骤 5 - 现在调用flattenHelper 函数带有输入数组 arr。
步骤 6 − 按照第五步,使用 sort() 方法对 flatArr 进行升序排序,该方法带有一个检查两个项目的回调函数。
步骤 7 − 最后返回 flatArr 作为输出。
示例
function flattenAndSort(arr) {
const flatArr = [];
// 递归扁平化并将元素推送到 flatArr 的函数
function flattenHelper(arr) {
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
// 递归地展平子数组
flattenHelper(arr[i]);
} else {
// 将元素推送到 flatArr 中
flatArr.push(arr[i]);
}
}
}
flattenHelper(arr);
// 按升序对 flatArr 进行排序
flatArr.sort((a, b) => a - b);
return flatArr;
}
// 示例用法
const arr = [4, 2, [5, 1], 3, [6]];
const sortedArr = flattenAndSort(arr);
console.log(sortedArr);
输出
[ 1, 2, 3, 4, 5, 6 ]
复杂性
上述代码使用 flat() 函数展平数组,然后我们使用 sort 方法对数组进行排序。此方法的时间复杂度为 O(n log n)。其中 n 是数组中的项目总数。sort 方法的最坏情况时间复杂度为 O(n log n)。
结论
包含子数组中存在的项目的数组取决于数组的大小和问题的复杂性。我们已经看到,平坦方法是展平小数组的一种简单而好的方法。
相关文章
有用资源
javascript 参考教程 - 该教程包含有关 javascript 的更多信息:https://www.cainiaomax.com/javascript/

