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