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); // in ascending order
output -  [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

flat()函数用于通过连接子数组来展平数组。默认情况下,它将数组展平一层。但是,我们可以提供一个数字来将数组展平到一定的深度。例如:

input -  arr = [1, [2, 3], [4, [5, 6]]];
const flatArr = arr.flat();
output - [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变量,并在创建的arr上应用flat方法。

步骤3 - 展平数组arr后,我们现在将使用sort方法对数组进行排序。

步骤4 - 在控制台中显示输出

示例

const arr = [4, 2, [5, 1], 3, [6]];

// Flatten the array
const flatArr = arr.flat();
// Sort the flattened array
flatArr.sort((a, b) => a - b);
console.log("After sorting the elements from subarray");
console.log(flatArr); 

输出

After sorting the elements from subarray
[ 1, 2, 3, 4, 5, 6 ]

算法 - 第二种方法

步骤1 - 声明一个名为flatArr的空数组

步骤2 - 定义一个名为flattenHelper的辅助方法,它将数组作为参数,并对数组的每个项目进行迭代。

步骤3 - 如果项目存在于数组中,则在元素上递归调用flattenHelper函数。

步骤4 - 如果元素不存在于数组中,则将其推入flatArr。

步骤5 - 现在使用输入数组arr调用flattenHelper函数。

步骤6 - 在第五步之后,使用sort()方法(带有检查两个项目的回调函数)按升序对flatArr进行排序。

步骤7 - 最后返回flatArr作为输出。

示例

function flattenAndSort(arr) {
  const flatArr = [];

  // A function to recursively flatten and push elements into flatArr
  function flattenHelper(arr) {
    for (let i = 0; i < arr.length; i++) {
      if (Array.isArray(arr[i])) {

     // recursively flatten subarray
        flattenHelper(arr[i]); 
      } else {
        // push element into flatArr
        flatArr.push(arr[i]); 
      }
    }
  }

  flattenHelper(arr);
  // sort flatArr in ascending order
  flatArr.sort((a, b) => a - b); 

  return flatArr;
}

// example usage
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)。

结论

包含子数组中项目的数组取决于数组的大小和问题的复杂性。我们已经看到,flat方法是展平小型数组的一种简单而有效的方法。

更新于:2023年8月23日

浏览量:154

开启您的职业生涯

通过完成课程获得认证

开始学习
广告