javascript数组拍平方法总计,javascript数组

在付出进度中有得时候总是碰一些共性的主题材料,举例将一个二维数组拍平成1维数组,只怕三个维度数组拍平成一维数组。那几个难点在遇见的时候总会重新思虑,比不上将其提炼出来,总结一下。

javascript数组拍平方法总括,javascript数组

在开垦进度中有得时候总是碰一些共性的标题,比方将1个二维数组拍平成一维数组,可能三个维度数组拍平成壹维数组。那些主题材料在碰到的时候总会重新考虑,不比将其提炼出来,总计一下。

下边我将为大家演示一下,将三个多维数组拍平成1个1维数组的两种艺术,算是进行试探,大家有更加好的法子可以在留言区发布。

第3是首先种艺术,递归管理,代码如下:

var arr = [1, 2, 3, [3, 3, 3, [5, 4, 5, 6, 6, 7, 8]],
 [333, 4444]
];
function product() {
 // 1、创建一个空数组,
 var newarr = [];
 ///2、并且返回一个函数,函数参数为要拍平的数组
 return function flatten(arr) {
  // 3、循环数组,判断每一项,不为输的话将其塞入newarr
  // 若为数组,递归调用 faltten,并将结果与newarr合并
  for (var t of arr) {
   if (!Array.isArray(t)) {
    newarr.push(t);
   } else {
    newarr.concat(flatten(t))
   }
  }
  return newarr
 }
}
var flatten = product();
console.log(flatten(arr))

实践结果为:

图片 1

地点那这种办法相比中规中矩,代码详解见注释,下边这种艺术应用到了javascript语言的一些新特色,代码如下:

var arr = [1, 2, 3, [3, 3, 3, [5, 4, 5, 6, 6, 7, 8]],
 [333, 4444]
];
function flatten(arr){
 return arr.reduce(function(pre,cur){
  if(!Array.isArray(cur)){
   return [...pre,cur];
  }else{
   return [...pre,...flatten(cur)]
  }
 },[])
}
console.log(flatten(arr))

下边代码中用了ES陆的1个新性情扩大云算法
“…”,“[…abc,…fff]”其作用相当于abc.concat(fff),这种用法更直观明了,还应该有就是使用了reduce方法。reduce是javascript语言中数组的一个办法。

数组调用recduce方法时,能够传递八个参数,第3个参数为回调函数,第一个参数为3个先河值。回调函数中须求传递三个参数,首个参数为每便施行函数的重回值,第二个参数为如今目录对应数组的值。reduce的第2个参数是可以简轻便单的,省略的话,回调函数第叁回调用的参数为数组的率先项和第二项的值,假如未有轻巧,回调函数的率先个参数就是其一初叶值。上面包车型客车例证,reduce的第二个参数设置了1个空数组。

reduce的文书档案地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global\_Objects/Array/Reduce

比较来讲第2种比较好驾驭,第二种的难点在于对reduce函数的运用和精晓。

http://www.bkjia.com/Javascript/1295851.htmlwww.bkjia.comtruehttp://www.bkjia.com/Javascript/1295851.htmlTechArticlejavascript数组拍平方法总结,javascript数组
在支付进度中有得时候总是碰一些共性的难点,比方将二个二维数组拍平成1维数组,或然三个维度数…

上面小编将为我们演示一下,将一个多维数组拍平成一个1维数组的三种方法,算是一得之见,大家有更加好的主意能够在留言区公布。

先是是首先种格局,递归管理,代码如下:

var arr = [1, 2, 3, [3, 3, 3, [5, 4, 5, 6, 6, 7, 8]],
 [333, 4444]
];
function product() {
 // 1、创建一个空数组,
 var newarr = [];
 ///2、并且返回一个函数,函数参数为要拍平的数组
 return function flatten(arr) {
  // 3、循环数组,判断每一项,不为输的话将其塞入newarr
  // 若为数组,递归调用 faltten,并将结果与newarr合并
  for (var t of arr) {
   if (!Array.isArray(t)) {
    newarr.push(t);
   } else {
    newarr.concat(flatten(t))
   }
  }
  return newarr
 }
}
var flatten = product();
console.log(flatten(arr))

实践结果为:

图片 2

上边那这种办法相比较中规中矩,代码详解见注释,下面这种方法运用到了javascript语言的有的新性格,代码如下:

var arr = [1, 2, 3, [3, 3, 3, [5, 4, 5, 6, 6, 7, 8]],
 [333, 4444]
];
function flatten(arr){
 return arr.reduce(function(pre,cur){
  if(!Array.isArray(cur)){
   return [...pre,cur];
  }else{
   return [...pre,...flatten(cur)]
  }
 },[])
}
console.log(flatten(arr))

上面代码中用了ES六的三个新特点增添云算法
“…”,“[…abc,…fff]”其功效相当于abc.concat(fff),这种用法更直观明了,还会有正是运用了reduce方法。reduce是javascript语言中数组的二个办法。

数组调用recduce方法时,能够传递三个参数,第一个参数为回调函数,第3个参数为3个开端值。回调函数中要求传递多少个参数,第多少个参数为每回实践函数的再次来到值,第二个参数为日前目录对应数组的值。reduce的第一个参数是足以回顾的,省略的话,回调函数第壹遍调用的参数为数组的第3项和第3项的值,倘诺未有轻巧,回调函数的率先个参数正是以此初叶值。上面包车型客车事例,reduce的第一个参数设置了二个空数组。

reduce的文书档案地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

相比之下来讲第三种比较好精通,第二种的难关在于对reduce函数的行使和明白。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图