js—数组那些事儿
数组维度升级
创建一维数组
//创建一维数组
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']
}
js—数组那些事儿的更多相关文章
- 小兔JS教程(四)-- 彻底攻略JS数组
在开始本章之前,先给出上一节的答案,参考答案地址: http://www.xiaotublog.com/demo.html?path=homework/03/index2 1.JS数组的三大特性 在J ...
- js数组学习整理
原文地址:js数组学习整理 常用的js数组操作方法及原理 1.声明数组的方式 var colors = new Array();//空的数组 var colors = new Array(3); // ...
- 转→js数组遍历 千万不要使用for...in...
看到一篇内容还不错,但是排版实在糟糕, 逼死强迫症患者啊,直接拉下去找原文连接,找到了,但是已经消失了···500错误... 第一次因为实在看不下去一篇博客的排版, 为了排版而转载... 转载地址:h ...
- js数组操作大全
原文(http://www.cnblogs.com/webhotel/archive/2010/12/21/1912732.html) 用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简 ...
- js数组去重的4种方法
js数组去重,老生长谈,今天对其进行一番归纳,总结出来4种方法 贴入代码前 ,先对浏览器Array对象进行支持indexOf和forEach的polyfill Array.prototype.inde ...
- js 数组处理函数
本文转载自有有<js 数组处理函数> concat 将参数列表连接到原数组后面形成一个新的数组并返回,原有数组不受影响. var arr = ["a","b& ...
- js 数组赋值问题 :值传递还是引用?
转载于知乎var a = [1,2,3]; var b = a; a = [4,5,6]; alert(b); //[1,2,3] 面试时被问到这样一个问题,竟然从来没试过... 当时直接的理解,数组 ...
- JS数组方法汇总 array数组元素的添加和删除
js数组元素的添加和删除一直比较迷惑,今天终于找到详细说明的资料了,先给个我测试的代码^-^ var arr = new Array(); arr[0] = "aaa"; arr[ ...
- js数组操作
用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多, 自以为js高手的自己居然无从下手,一下狠心,我学! ...
随机推荐
- http请求头中的content-type属性
在HTTP请求中,我们每天都在使用Content-Type来指定不同格式的请求信息,但是却很少有人去全面了解Content-Type中允许的值有多少,因此这里来了解一下Content-Type的可用值 ...
- 13、python的路径处理
前言:本文主要介绍python中路径的处理,包括os模块和有关的2个魔法变量. 一.os模块 python里面的os模块有许多方法可以让我们通过代码实现创建,删除和更改目录,具体如下: os.getc ...
- MySQL军规升级版(转)
一.基础规范 表存储引擎必须使用InnoDB 表字符集默认使用utf8,必要时候使用utf8mb4 解读:(1)通用,无乱码风险,汉字3字节,英文1字节(2)utf8mb4是utf8的超集,有存储4字 ...
- mong 的 安装 和测试
<hr>
- [Ubuntu]解决"系统的网络服务与此版本的网络管理器不兼容"提示
先贴方法: sudo -s ' 获取root权限 apt-get install network-manager ' 重装网络管理器 如果系统提示有升级包可用则安装即可. 开机后,右上角没有网络图标. ...
- NodeJS+axios上传图片
前端js部分 changeEvent (e) { ------ //change事件方法 let oFile = e.target.files[0] ------ //获取文件对象 let param ...
- logback 发送邮件和自定义发送邮件;java类发送邮件
使用logback发送邮件 需求: 1.报错发邮件,定位错误位置以尽快解决:(报错发送邮件) 2.某一项重要操作完成之后发送邮件:(自定义发送邮件) 没有接触过logback,怎么办? 没办法,硬着头 ...
- C++类中拷贝构造函数详解
a. C++标准中提到"The default constructor, copy constructor and copy assignment operator, and destruc ...
- HDU_1495_模拟
http://acm.split.hdu.edu.cn/showproblem.php?pid=1495 自己用模拟写的,先除以三个数的最大公约数,弱可乐为奇数,则无解,然后开始模拟. 利用大杯子和小 ...
- JAVA编程学习之JAVA集合
一.JAVA集合类 为了保存数量不确定的数据,以及保存具有映射关系的数据(关联数组),java提供了集合类.所有集合类位于java.util包下. 集合类就像容是器,现实生活中容器的功能,无非就是添加 ...