数组维度升级

创建一维数组

//创建一维数组
var a=[];
var b=new Array();
var c=[1,2,'w'];
var d=[1,2,[1,2]];

创建二维数组

var c=[[1,2],[1,2]];

//创建二维7*7数组,且填充为‘[w]’
var a=new Array(7);
for(var i=0; i<7; i++){
a[i] = new Array(7).fill('[w]');
}

数组维度降级(n维变1维)

数组降维-掘金

n维变1维

var a=[1,[2,3],[2,[3,4]],6];

  • concat方法(普遍通用)
while(a.some(item=>Array.isArray(item))){
a=[].concat(...a);}
  • 字符串方法(适应于纯数字的多维数组中)
var b=a.toString().split(',').map(i=>parseInt(i));
  • es6的flat()方法chrome69才开始支持
a.flat(Infinity);

数组的浅拷贝与深拷贝

数组浅拷贝与深拷贝方法-sf

浅拷贝

  • 直接赋值(浅拷贝),
  • slice,concat,Array.from方法,扩展运算符(首层深拷贝),对象还有Object.assign()
var a=[1,2,[3,4]];
var b=a; // b=[1,2,[3,4]];
var c=[...a]; //c=[1,2,[3,4]];
b[0]=100; c[2][0]=101;
console.log("a",a,"\nb",b,"\nc",c); //a[100,2,[101,4]] b[100,2,[101,4]] c[1,2,[101,4]]

深拷贝

  • JSON的parse和stringify方法,但是该方法又局限性,不能适用于对象中含有undefined、function、symbol,他们会在转换过程中被忽略。。。
var a=[1,2,[3,4]];
var b=JSON.parse(JSON.stringify(a));
b[2][0]=100;
console.log("a",a,"\nb",b); //a[1,2,[3,4]] b[1,2,[100,4]]
  • 递归就是对每一层的数据都实现一次 创建对象->对象赋值 的操作
function deepClone(source){
const targetObj = source.constructor === Array ? [] : {}; // 判断复制的目标是数组还是对象
for(let keys in source){ // 遍历目标
if(source.hasOwnProperty(keys)){
if(source[keys] && typeof source[keys] === 'object'){ // 如果值是对象,就递归一下
targetObj[keys] = source[keys].constructor === Array ? [] : {};
targetObj[keys] = deepClone(source[keys]);
}else{ // 如果不是,就直接赋值
targetObj[keys] = source[keys];
}
}
}
return targetObj;
}

判断空数组arr=[]

  • 法一
if(Array.isArray(arr) &&  arr.length===0){
console.log('是空数组');
}

数组去重(适用题型:返回不重复数组,返回不重复数组的长度,返回重复的数值组成的数组)

var a=[1,2,2,4,2,4];

  • 法一 返回重复值组成的数组
function duplicates(arr) {
var a=[];
for(var i=0;i<arr.length;i++){
if(arr.indexOf(arr[i])!=arr.lastIndexOf(arr[i])&& a.indexOf(arr[i]) == -1){
a.push(arr[i]);
}
}
return a;
}
  • 法二 返回重复值组成的数组
function duplicates(arr) {
return arr.filter((val,i,arr)=>arr.indexOf(val)!===i && arr.lastIndexOf(val)===i); //返回的是[2,4]
}
  • 法三 返回重复值的个数
function duplicates(arr) {
return arr.sort().join('').match(/([^])\1+/g).length; //这里match匹配之后返回的是['222','44']
}

最新文章

  1. HDU Cow Sorting (树状数组)
  2. iTween 动画类型
  3. git diff提示filemode发生改变(old mode 100644、new mode 10075)
  4. create()创建的控件不能映射消息函数的解决
  5. iOS xcode6 设置多语言
  6. PHP获取远程图片并调整图像大小(转)
  7. 潜入ICU的四逆汤
  8. JavaScript 调试小技巧
  9. angular_$attrs
  10. 一个简单的解决方法:word文档打不开,错误提示mso.dll模块错误。
  11. CityEngine 2013部署安装
  12. 关于automatic_Panoramic_Image_Stitching_using_Invariant_features 的阅读笔记
  13. 开始着手Oracle中Scott用户的管理系统
  14. HDU 4513 哥几个系列故事——形成完善II manacher求最长回文
  15. 残酷中蜕变的SEOer
  16. 【迅为电子】迷你工控机_24小时运行_无线WIFI_超多接口
  17. .NET快速信息化系统开发框架 V3.2-&gt;Web版本新增“文件管理中心”集上传、下载、文件共享等一身,非常实用的功能
  18. 【原创】大数据基础之Hadoop(3)yarn数据收集与监控
  19. Java_比较两个图片的相似度
  20. MySQL 查看执行计划

热门文章

  1. 11.黑窗口、IDEA生成JavaDoc
  2. C++模板编程与宏编程经验谈
  3. react元素获取e时,点击target为空的现象
  4. 使用C++进行声明式编程
  5. 利用在线绘制3d几何图形工具分析投影变化
  6. 整合spring-data-redis以及redisTemplate的使用
  7. c++中重载运算符
  8. printf的用法进阶
  9. windows 安裝 gcc 編譯器 - MinGW
  10. DHCP服务器配置及测试