javascript数组拍平方法总结

JavaScript 数组拍平方法总结

什么是数组拍平

在 JavaScript 中可以创建多重嵌套的数组,例如:

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

上述数组中包含了三个元素,其中第三个元素是一个嵌套的子数组,该子数组又包含了两个元素和一个嵌套的孙子数组。这样多重嵌套的数组在实际开发中很常见。

数组拍平指的是将多重嵌套的数组转化为一维数组,例如:

[1, 2, 3, 4, 5, 6]

原生方式实现数组拍平

JavaScript 语言提供了多种方式实现数组拍平,其中最简单的一种是使用 Array.prototype.flat() 方法,例如:

const nestedArr = [1, 2, [3, 4, [5, 6]]];
const flatArr = nestedArr.flat(2);
console.log(flatArr); // [1, 2, 3, 4, 5, 6]

上述代码中 Array.prototype.flat() 方法的参数指定了拍平的深度,如果不指定深度则默认拍平一层。

需要注意的是在旧版本的浏览器中不支持这个方法,可以使用第三方库 lodash 中的 _.flattenDeep() 方法代替,例如:

const nestedArr = [1, 2, [3, 4, [5, 6]]];
const flatArr = _.flattenDeep(nestedArr);
console.log(flatArr); // [1, 2, 3, 4, 5, 6]

自定义函数实现数组拍平

如果想写一个自己的函数实现数组拍平,可以使用递归思想,例如:

function flat (arr) {
  let result = [];
  for (let i = 0; i < arr.length; i++) {
    if (Array.isArray(arr[i])) {
      result = result.concat(flat(arr[i]));
    } else {
      result.push(arr[i]);
    }
  }
  return result;
}

const nestedArr = [1, 2, [3, 4, [5, 6]]];
const flatArr = flat(nestedArr);
console.log(flatArr); // [1, 2, 3, 4, 5, 6]

上述代码中,flat() 函数使用递归的方式实现数组拍平,当遇到子数组时会递归调用自身。

下面使用另一个例子说明,例如:

const nestedArr = [1, [2, 3, [4, 5]], 6, [7, [8, [9]]]];
const flatArr = flat(nestedArr);
console.log(flatArr); // [1, 2, 3, 4, 5, 6, 7, 8, 9]

上述代码中的 nestedArr 数组包含了四个元素,其中包含多层嵌套的子数组,通过调用 flat() 函数可以将其转化为一维数组。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript数组拍平方法总结 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 通过fastclick源码分析彻底解决tap“点透”

    通过fastclick源码分析彻底解决tap“点透” 背景 在移动端开发过程中,常常会遇到“点透”的问题。例如,当一个元素的click事件和另一个元素的touchend事件同时被触发时,就会发生“点透”,相当于用户点了下下一层的元素。为了避免这种问题的出现,我们可以使用第三方库 fastclick 来解决这一问题,此处将通过 fastclick 的源码分析来…

    JavaScript 2023年6月11日
    00
  • 使用JS中的Replace()方法遇到的问题小结

    使用JS中的Replace()方法是对字符串进行替换操作的常见方法,但在使用过程中,可能会遇到一些问题,本文将对使用过程中可能会遇到的问题进行小结,希望能帮助读者更好地掌握该方法的使用。 问题一:正则表达式符号的转义问题 在进行字符串的替换操作时,可能需要使用到正则表达式符号,例如点号(.)、问号(?)等。但是,在使用时,这些符号需要进行转义,如用“.”代替…

    JavaScript 2023年5月18日
    00
  • 如何快速解决JS或Jquery ajax异步跨域的问题

    跨域问题在前端开发中是比较常见的问题,特别是在开发时使用了AJAX或JQuery AJAX进行异步请求时。下面为您提供解决跨域问题的完整攻略: 1. 使用JSONP JSONP(JSON with Padding)是解决跨域问题的一种方式,它利用了HTML文档可以通过script标签嵌入并执行javascript代码的特性。 要使用JSONP,需要在服务端添…

    JavaScript 2023年6月11日
    00
  • JavaScript累加、迭代、穷举、递归等常用算法实例小结

    JavaScript累加、迭代、穷举、递归等常用算法实例小结 累加 累加即将一个数字序列中的所有数字相加。 function sum(numbers) { let result = 0; for (let i = 0; i < numbers.length; i++) { result += numbers[i]; } return result; }…

    JavaScript 2023年5月28日
    00
  • JavaScript 学习点滴记录

    JavaScript 学习指南 前言 JavaScript 是一种脚本语言,普遍应用于 Web 开发中。JavaScript 是一种动态的、弱类型解释性语言,并且具有多范式的特性,如面向对象、命令式、声明式等。 在学习 JavaScript 的过程中,我们需要学习它的基本语法和常见的应用。随着学习的深入,我们可以从以下几个方面来拓展自己的知识面: 前端框架和…

    JavaScript 2023年5月27日
    00
  • android WebView加载html5介绍

    下面我将为您详细讲解android WebView加载html5的攻略。 简介 WebView是Android提供的一个用于显示网页的控件,其底层使用的是Chrome浏览器内核,因此支持HTML5技术。HTML5是一种用于Web开发的标准,增加了很多新的功能,如音视频播放、Canvas绘图、自适应布局等。本文将介绍如何使用WebView来加载HTML5页面。…

    JavaScript 2023年6月11日
    00
  • javascript实现一个网页加载进度loading

    下面是关于Javascript实现一个网页加载进度loading的完整攻略。 步骤一:添加HTML结构 首先,在网页的HTML结构中添加loading元素,用于显示进度条和加载状态。可以采用下面代码模板: <div id="loading"> <div id="progress"></di…

    JavaScript 2023年6月11日
    00
  • 基于js对象,操作属性、方法详解

    基于JS对象,操作属性、方法详解 什么是JS对象 JS对象是JS语言中最为核心的所有元素之一,用于封装各种数据类型和功能。 如何创建JS对象 在JS中,创建对象有两种方式: 使用对象字面量 通过使用对象字面量,可以创建一个空对象,并在对象字面量中定义对象属性和方法。 示例: let person = { name: ‘Alice’, age: 22, say…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部