Home > Web Front-end > JS Tutorial > body text

The javascript array flattening method is explained in detail

小云云
Release: 2018-01-24 10:00:22
Original
1777 people have browsed it

In the development process, we always encounter some common problems, such as flattening a two-dimensional array into a one-dimensional array, or flattening a three-dimensional array into a one-dimensional array. These problems will always be rethought when encountered, so it is better to refine them and summarize them.

The author below will demonstrate to you two methods of flattening a multi-dimensional array into a one-dimensional array. It can be regarded as a starting point. If you have a better method, you can post it in the message area.

The first is the first method, recursive processing, the code is as follows:


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))
Copy after login

The execution result is:

The above method is quite satisfactory. Please see the comments for a detailed explanation of the code. The following method uses some new features of the JavaScript language. The code is as follows:


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))
Copy after login

Above The code uses a new feature of ES6 to extend the cloud algorithm "...", "[...abc,...fff]" whose function is equivalent to abc.concat(fff), this usage is more intuitive and clear, and also There is the use of the reduce method. reduce is a method of arrays in javascript language.

When calling the recduce method on an array, you can pass two parameters. The first parameter is the callback function, and the second parameter is an initial value. Two parameters need to be passed in the callback function. The first parameter is the return value of each execution of the function, and the second parameter is the value of the array corresponding to the current index. The second parameter of reduce can be omitted. If it is omitted, the parameters of the first call of the callback function are the values ​​of the first and second items of the array. If not omitted, the first parameter of the callback function is this initial value. . In the above example, the second parameter of reduce is set to an empty array.

Reduce document address: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

Compared to the first The first one is easier to understand, while the difficulty of the second one lies in the use and understanding of the reduce function.

Related recommendations:

php method to find the palindrome number in the range and the square root is also a palindrome number

JavaScript is based on Newton iteration Example analysis of how to find the square root of a floating point number

About the square root problem in PHP

The above is the detailed content of The javascript array flattening method is explained in detail. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!