前端基础之数组扁平化

Posted Smile沛沛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端基础之数组扁平化相关的知识,希望对你有一定的参考价值。

数组扁平化
  • ES6 : flat方法
let arr = [
    [1, 2, 2],
    [3, 4, 5, 5],
    [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10
];

arr = arr.flat(Infinity)		//后面传入的参数是扁平化的级数;Infinity表示扁平化无限级
  • toString
let arr = [
    [1, 2, 2],
    [3, 4, 5, 5],
    [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10
];

arr = arr.toString().split(',').map((item)=>{
  return parseFloat(item)
})

//toString后  "1,2,2,3,4,5,5,6,7,8,9,11,12,12,13,14,10"
//split(',')["1", "2", "2", "3", "4", "5", "5", "6", "7", "8", "9", "11", "12", "12", "13", "14", "10"]
//然后再把每一项转化成数字
let arr = [
    [1, 2, 2],
    [3, 4, 5, 5],
    [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10
];

arr = JSON.stringify(arr).replace(/\\[|\\]/g,'').split(', ').map((item)=>{
  return parseFloat(item)
})
// JSON.stringify(arr)"[[1,2,2],[3,4,5,5],[6,7,8,9,[11,12,[12,13,[14]]]],10]"
let arr = [
    [1, 2, 2],
    [3, 4, 5, 5],
    [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10
];

arr.join('|').split(/(?:,|\\|)/g).map((item)=>{
  return parseFloat(item)
})
  • 循环验证数组
    • 循环验证是否为数组,是的话继续循环,不是的话直接存入
let arr = [
    [1, 2, 2],
    [3, 4, 5, 5],
    [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10
];

function flatten(arr){
  while(arr.some(item => Array.isArray(item))){
  	arr = flatten([].concat(...arr))		//[].concat(...arr)这样操作会展开一层。递归继续扁平化处理
	}
	return arr;
}
//循环递归,判断当前项是否是数组,如果不是数组那么存进新数组中,如果是数组那么继续校验
(function(){
  function myFlat(){
  		let result = [],
  				_this = this;
			let fn = (arr) => {
        for(let i = 0;i<arr.length;i++){
          let item = arr[i]
          if(Array.isArray(item)){		//如果是数组那么自己递归继续展开,不是的话直接push到result中
            fn(item);
            break;
          }
          result.push(item)
        }
			}
			fn(_this)
      return result;
	}
	Array.prototype.myFlat = myFlat;
})()

arr = arr.myFlat();

补充:

some

some验证数组中的某一项是否有符合规则的。some返回的结果不是true就是false
some用于检测数组中是否有符合条件的元素,方法会依次执行数组的每个元素

  • 如果有一个满足条件的,则返回true,剩余的元素不会再执行检测
  • 没有满足条件的,返回false
    every用于检测数组中的元素是否都符合条件
  • 如果检测的数组中有一个不满足条件,那么返回false,并且剩余的不再检测
  • 如果都满足条件那么返回true
var A = [3, 4, 5, 5]
var B = A.some((item)=>{
  return item >=5;	//只要数组中有大于5的那么B就是true
})
find

Find返回的结果如果有就找出这项结果返回,如果没有就返回undefined。并且只查找哦这一项

var A = [3, 4, 5, 5]
var B = A.find((item)=>{
  return item >=4;	//有返回这项值,没有返回undefined
})

以上是关于前端基础之数组扁平化的主要内容,如果未能解决你的问题,请参考以下文章

前端面试 JavaScript— JS中将数组扁平化有哪些方法?

js之数组操作

前端日常开发常用功能系列之数组去重

web前端之JavaScript的插件下载指令及介绍npminstallsaverequire

前端面试题之手写promise

[vscode]--HTML代码片段(基础版,reactvuejquery)