300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > JavaScript数组的扁平化:将 2D JavaScript 二维数组转换为 1D 一维数组(多种方法)

JavaScript数组的扁平化:将 2D JavaScript 二维数组转换为 1D 一维数组(多种方法)

时间:2020-10-10 18:04:29

相关推荐

JavaScript数组的扁平化:将 2D JavaScript 二维数组转换为 1D 一维数组(多种方法)

推荐阅读:

js对象扁平化:_南北极之间的博客-CSDN博客_js扁平化js对象扁平化的方法:1、使用 concat() 方法在2、 使用 flat() 方法3、使用用户定义的函数此示例将设置一个包含数组对象、普通对象和嵌套对象的对象。我们将在方法和方法的帮助下展平整个对象。将返回一个包含所有其他对象的数组,并将合并这些对象。 输出: 所有对象都平展在单个数组中,嵌套对象是该合并数组的成员。在输出中,您几乎无法区分先前的键值对。我们分离了键,并用值将它们连接起来。在这里,我们将观察一个类似的对象,以展平其组件。我们将使用该方法来平展主对象的各个对象的值。因此,我们只会得到/qq_22182989/article/details/125496432

什么是数组扁平化?

数组扁平化:指将一个多维数组转化为一个一维数组。

给定数组:

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];

目标值:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

方法:

​ 解决方案 1:使用 concat() 和 apply() ​

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];function flatten(arr) {var myNewArray = [].concat.apply([], myArray);return myNewArray;}flatten(myArray);// [1, 2, 3, 4, 5, 6, 7, 8, 9]

​ 解决方案 2:使用 reduce() ​

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];function flatten(arr) {var myNewArray = myArray.reduce(function(prev, curr) {return prev.concat(curr);});return myNewArray;}flatten(myArray);// [1, 2, 3, 4, 5, 6, 7, 8, 9]

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];function flatten(arr) {return arr.reduce((res,next) =>{return res.concat(Array.isArray(next)? flatten(next) : next);},[]);}flatten(myArray);// [1, 2, 3, 4, 5, 6, 7, 8, 9]

解决方案 3:递归遍历

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];function flatten(arr) {let result = []for (const item of arr) {if (Array.isArray(item)) {result = result.concat(flatten1(item))} else {result.push(item)}}return result}flatten(myArray);//[1, 2, 3, 4, 5, 6, 7, 8, 9]

解决方案 4:在 ES6 中使用点差运算符(扩展运算符)

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];function flatten(arr) {var myNewArray = [].concat(...arr);return myNewArray;}flatten(myArray);// [1, 2, 3, 4, 5, 6, 7, 8, 9]

​ 解决方案 5:在 ES10 中使用 flat() ​

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];function flatten(arr) {var myNewArray = myArray.flat();return myNewArray;}flatten(myArray);// [1, 2, 3, 4, 5, 6, 7, 8, 9]

解决方案 6:for循环

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];function flatten(arr) {var res = [];for (let i = 0, length = arr.length; i < length; i++) {if (Array.isArray(arr[i])) {res = res.concat(flatten(arr[i])); //concat 并不会改变原数组//res.push(...flatten(arr[i])); //扩展运算符} else {res.push(arr[i]);}}return res;}flatten(myArray);//[1, 2, 3, 4, 5, 6, 7, 8, 9]

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];function flatten(arr) {var myNewArray = [];for (var i = 0; i < arr.length; ++i) {for (var j = 0; j < arr[i].length; ++j)myNewArray.push(arr[i][j]);}return myNewArray;}flatten(myArray);// [1, 2, 3, 4, 5, 6, 7, 8, 9]

解决方案7:while循环

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];function flatten(arr) {while (arr.some(item => Array.isArray(item))) {arr = [].concat(...arr);//arr = Array.prototype.concat.apply([],arr);}return arr;}flatten(myArray);//[1, 2, 3, 4, 5, 6, 7, 8, 9]

解决方案 8:使用toString()+split()或者join()+split()

原理很简单,先把数组转换成字符串,这个过程会吧[]去掉,然后再调用split()方法转换成数组,最后不能忘了,吧每一项转换为数组,即调用map()方法。

方法1:arr.toString().split(',').map(item => +item);

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];function flatten(arr) {return arr.toString().split(',').map(item => +item);}flatten(myArray);//[1, 2, 3, 4, 5, 6, 7, 8, 9]

方法2:arr.join(',').split(',').map(item => +item);

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];function flatten(arr) {return arr.join(',').split(',').map(item => +item);}flatten(myArray);(9)[1, 2, 3, 4, 5, 6, 7, 8, 9]

解决方案 9:正则表达式

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];function flatten(arr) {let result = JSON.stringify(arr); // JSON.stringify 转换后的结果 '[1,[2,34,[12,4]],23]'result = result.replace(/(\[|\])/g, '');return JSON.parse(`[${result}]`)}flatten(myArray);(9)[1, 2, 3, 4, 5, 6, 7, 8, 9]

解决方案 10:栈

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];function flatten(arr) {let res = [];const stack = [].concat(arr);while (stack.length > 0) {// pop()方法从数组中删除最后一个元素,并返回该元素的值。此方法更改数组的长度。const item = stack.pop();if (Array.isArray(item)) {/*** push() 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度。* 用扩展运算符展开一层*/stack.push(...item);} else {// unshift() 方法将一个或多个元素添加到数组的开头,并返回该数组的新长度(该方法修改原有数组)。item !== undefined && res.unshift(item);}}return res;}flatten(myArray);//[1, 2, 3, 4, 5, 6, 7, 8, 9]

资料:

JS数组扁平化的一些方法(7-8种) - 掘金引子:这些日子在看es相关的新属性是有一个数组的方法 flat() 引起的我的注意。 我去找了一下维基百科,上面并没有关于扁平化的直接解释,只有一个扁平化组织释义。 金字塔组织,这个众所周知,它表现的层级结构就是一个金字塔式的形状。 扁平化组织(Flat organizatio…/post/6844903805876699150js数组扁平化的六种方法_爱吃肉的薄凉的博客-CSDN博客_js数组扁平化处理我也不知道为什么要整理这么多种方法,算是拓展个思路吧。🤦‍♂️let array = [1, [2, 34, [12, 4]], 23];1.递归遍历function flatten1(array) { let result = [] for (const item of array) { if (Array.isArray(item)) { result = result.concat(flatten1(item)) } e./weixin_43544093/article/details/123842757

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。