Math.prototype.concat详解及二维数组扁平化方法
来源:互联网 发布:安兔兔验机网络不好 编辑:程序博客网 时间:2024/06/05 12:50
当concat的参数不为数组时
var arr1 = ['a', 'b', 'c'];var arr2 = arr1.concat([1,2,[3,5,[6,7]]],4,5);//这里[1,2,[3,5,[6,7]]],4,5不是数组console.log(arr2);VM1827:3 (8) ["a", "b", "c", 1, 2, Array(3), 4, 5]
当concat
参数不为数组时,如上面的[1,2],4,5,
则会将[1,2],4,5
里面的参数若是基本类型则直接push进数组,如果是多维数组则只会拆开一层,而调用者数组不会改变,会原封不动的首先添加到新数组中。
当concat的参数整体不是数组,但里面的某几个项是数组时,此项的改变不会作用到新数组上
var arr1 = [['a', 'b'], 'c'];var arr2 = [1,2];var arr3 = arr1.concat(arr2,4,5);arr3;//(6) [Array(2), "c", 1, 2, 4, 5]arr2.push(1000);arr3;//(6) [Array(2), "c", 1, 2, 4, 5]
可见arr2
的改变并未影响新数组arr3;
当concat的参数是数组时
当concat
的参数是数组时,相当于遍历这个数组,将每一项值浅拷贝到新数组中因此原数组中某一个数组项(如下面的arr2
)的改变会体现到新数组上。
var arr1 = [['a', 'b'], 'c'];var arr2 = [1,2];var arr3 = [arr2,4,5];var arr4 = arr1.concat(arr3);arr4;/**0:["a", "b"]1:"c"2:(2) [1, 2]3:44:5**/
现在改变arr2
的值:
arr2.push(345);arr4;/**0:(2) ["a", "b"]1:"c"2:(3) [1, 2, 345];//注意这里已经将arr2中新加入的值加入新数组中了3:44:5**/
而当concat
的参数为数组,且这个数组整体改变时不会影响新数组,还是上面的例子,现在更新arr3:
arr3.push(890);arr4;/**0:["a", "b"]1:"c"2:(2) [1, 2]3:44:5**/
arr4
并没有变化。
二维数组扁平化方法
1.
var newArr = Array.prototype.concat.apply([],arr);
2.
var newArr = arr.reduce(function(prev,next){ retrun prev.concat(next);});
3.
var newArr = [].concat(...arr);//注意扩展运算符只能扁平化一层数组
4.
var reg = /[\[\]]/g;var str = JSON.stringify(arr);var arrstr = str.replace(reg,function(c,pos){ if(pos !== 0 && pos !== str.length - 1){ return ''; }else{ return c; }});var newarr = JSON.parse(arrstr);
阅读全文
0 0
- Math.prototype.concat详解及二维数组扁平化方法
- 15、二维数组、字符串及Math
- Array.prototype.slice.call()详解及转换数组的方法
- Array.prototype.slice.call()详解及转换数组的方法
- Array.prototype.slice.call()详解及转换数组的方法
- JS:数组扁平化
- js数组扁平化
- 多维数组扁平化
- 数组扁平化
- 扁平化多维数组
- js---js的concat函数、join 、slice函数及二维数组的定义方式
- JS数组扁平化处理的几种方法
- JavaScript : Array.prototype.concat()中涉及嵌套数组
- PHP扁平化数组代码
- JS扁平化数组代码
- javascript中数组的concat()方法
- JS之连接数组方法concat
- javascript中数组的concat()方法
- Android Handler 、 Looper 、Message
- poj 3292 (前缀和)
- 生成对抗网络(GAN)初探
- WebView中给url添加cookie的值
- JEECMS源代码基本结构及相关技术简介
- Math.prototype.concat详解及二维数组扁平化方法
- ISO普及
- Spring AOP 完成日志记录
- gcc中-pthread和-lpthread的区别
- 设计模式之——原型设计模式
- 20:计算2的幂
- 配置mysql5.5主从复制数据库集群
- Spring+SpringMVC+Hibernate三大框架整合的SSH
- 老友记-第一季-第一集