三、ES6中数组拓展
一、Array.of()
将参数中所有值作为元素形成数组:
console.log(Array.of(1, 2, 3, 4)); // [1, 2, 3, 4]
参数的值可以为不同的类型:
console.log(Array.of(1, '2', true)); // [1, '2', true]
参数为空时返回空数组:
console.log(Array.of()); // []
注意:
let arr1 = new Array(10); //是一个长度为10的空数组
let arr2 = Array.of(10); //长度为1,第一个元素值为10的数组
二、Array.from()
参数为数组,返回与原数组一样的数组:
console.log(Array.from([1, 2])); // [1, 2]
参数含空位:
console.log(Array.from([1, , 3])); // [1, undefined, 3]
对数组元素进行处理,形成新的数组:
let arr = Array.from([1,2,3],n=>n*2);
console.log(arr); //[2,4,6]
利用函数处理数组,形成新的数组(奇数+1,偶数不变的规则):
//方案一:
let arr1 = [1,2,3,4,5,6];
let arr2 = Array.from(arr1,function(n){
if(n%2==1)
return n+1;
else
return n;
});
console.log(arr2);
//方案二:
function f(n)
{
if(n%2==1)
return n+1;
else
return n;
}
let arr1 = [1,2,3,4,5,6];
let arr2 = Array.from(arr1,function(n){
return f(n);
});
console.log(arr2);
三、类数组对象转换
将类似数组的对象转换成真正的数组:
let arr = Array.from({
0: "jack",
1: "rose",
2: "jordan",
length: 3
});
console.log(arr); // ["jack", "rose", "jordan"]
没有 length 属性,则返回空数组:
let arr = Array.from({
0: "jack",
1: "rose",
2: "jordan",
});
console.log(arr); // []
元素属性名不为数值且无法转换为数值,返回长度为length元素值为undefined的数组:
let arr = Array.from({
a: "jack",
b: "rose",
c: "jordan",
length: 3
});
console.log(arr); // [undefined, undefined,undefined]
四、转换可迭代对象
转换map:
let map = new Map();
map.set('23', '乔丹');
map.set('33', '皮蓬');
map.set('99', '罗德曼');
console.log(Array.from(map)); //[['23','乔丹'],['33','皮蓬'],['99','罗德曼']]
转换set:
let set = new Set();
set.add("乔丹");
set.add("皮蓬");
set.add("罗德曼");
console.log(Array.from(set)); //["乔丹","皮蓬","罗德曼"]
转换字符串:
let str = "hello!";
console.log(Array.from(str)); //['h','e','l','l','o','!']
五、扩展运算符...
复制数组内容:
//方案一:复制数组内容
// let arr1 = [1,2,3,4];
// let arr2 = [...arr1];
// console.log(arr2);
// console.log(arr1 === arr2); //false(arr1和arr2引用不同,只是值相同)
//方案二:直接数组名赋值
// let arr1 = [1,2,3,4];
// let arr2 = arr1;
// console.log(arr2);
// console.log(arr1 === arr2); //true(arr1和arr2的引用相同)
合并数组:
let arr1 = [1,2,3,4];
let arr2 = [1,2,3,4];
let arr = [...arr1,...arr2];
console.log(arr);
作为函数参数(可以接受可变长度的参数):
function Add(...items)
{
let sum = 0;
for(let item of items)
{
sum += item;
}
return sum;
}
let result1 = Add(1,2,3);
let result2 = Add(1,3,5,7,9);
console.log(result1);
console.log(result2);
六、扩展方法
查找:
//查找find()和findIndex()
//find():查找数组中符合条件的元素,若有多个符合条件的元素,则返回第一个元素。
// let arr = ["乔丹","皮蓬","罗德曼"];
// let r = arr.find(item=>item == "皮蓬");
// console.log(r); //皮蓬
// let arr = ["乔丹","皮蓬","罗德曼"];
// let r = arr.find(item=>item == "姚明");
// console.log(r); //undefined
// let arr = [1,2,3,4];
// console.log(arr.find(item => item > 2)); // 3
//findIndex():查找数组中符合条件的元素索引,若有多个符合条件的元素,则返回第一个元素索引。
let arr = [10,20,30,40];
console.log(arr.findIndex(item => item > 10)); // 1
填充:
//fill():将一定范围索引的数组元素内容填充为单个指定的值。
// 参数1:用来填充的值
// 参数2:被填充的起始索引
// 参数3(可选):被填充的结束索引,默认为数组末尾
// let arr = [1,2,3,4];
// arr.fill(0,1,2);
// console.log(arr);
//copyWithin():将一定范围索引的数组元素修改为此数组另一指定范围索引的元素。
// 参数1:被修改的起始索引
// 参数2:被用来覆盖的数据的起始索引
// 参数3(可选):被用来覆盖的数据的结束索引,默认为数组末尾
// let arr = [1,2,3,4];
// arr.copyWithin(0,2,4);
// console.log(arr); // [3, 4, 3, 4]
// let arr = [1, 2, ,4];
// arr.copyWithin(0, 2, 4);
// console.log(arr); // [, 4, , 4]
//第一个参数为负数表示倒数
// let arr = [1,2,3,4];
// arr.copyWithin(-2,0);
// console.log(arr); // [1, 2, 1, 2]
包含:
//includes():数组是否包含指定值。
// 参数1:包含的指定值
// let arr = [1,2,3];
// let r = arr.includes(1); // true
// console.log(r);
// 参数2:可选,搜索的起始索引,默认为0
let arr = [1,2,3];
let r = arr.includes(1, 1); // false
console.log(r);
嵌套数组转一维数组:
console.log([1 ,[2, 3]].flat()); // [1, 2, 3]
// 指定转换的嵌套层数
console.log([1, [2, [3, [4, 5]]]].flat(2)); // [1, 2, 3, [4, 5]]
// 不管嵌套多少层
console.log([1, [2, [3, [4, 5]]]].flat(Infinity)); // [1, 2, 3, 4, 5]
// 自动跳过空位
console.log([1, [2, , 3]].flat());<p> // [1, 2, 3]
三、ES6中数组拓展的更多相关文章
- ES6中数组和对象的扩展运算符拷贝问题以及常用的深浅拷贝方法
在ES6中新增了扩展运算符可以对数组和对象进行操作.有时候会遇到数组和对象的拷贝,可能会用到扩展运算符.那么这个扩展运算符到底是深拷贝还是浅拷贝呢? 一..使用扩展运算符拷贝 首先是下面的代码. le ...
- ES6中数组新增的方法-超级好用
Array.find((item,indexArr,arr)=>{}) 掌握 找出第一个符合条件的数组成员. 它的参数是一个回调函数,对所有数组成员依次执行该回调函数. 直到找出第一个返回值为t ...
- ES6中数组的新方法
数组的扩展 1.1扩展运算符 1.1.1:... 扩展运算符(spread)是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. <body> < ...
- ES6中的数组方法扩展
上一篇文章小编简单介绍了在ES6中,一些常用的方法和一些简单的应用,在这篇文章中,小编将针对ES6中数组常用方法进行扩展,相信经过这篇文章之后,每一位小伙伴下班时间会有所提前,就算从原来的996变成9 ...
- ES6中的数组常用方法
数组在JS中虽然没有函数地位那么高,但是也有着举足轻重的地位,下面我就结合这ES5中的一些常用的方法,与ES6中的一些方法做一些说明和实际用途.大家也可以关注我的微信公众号,蜗牛全栈. 一.ES5中数 ...
- TypeScript完全解读(26课时)_8.ES6精讲-ES6中的类(进阶)
8.TypeScript完全解读-ES6精讲-类(进阶) 在index.ts内引入 Food创建的实例赋值给Vegetabled这个原型对象,这样使用Vegetables创建实例的时候,就能继承到Fo ...
- 前端面试之JavaScript中数组的方法!【残缺版!!】
前端面试之JavaScript中数组常用的方法 7 join Array.join()方法将数组中所有元素都转化为字符串并连接在-起,返回最后生成的字 符串.可以指定一个可选的字符串在生成的字符串中来 ...
- es6中的...三个点
...是es6中新添加的操作符,可以称为spread或rest 定义一个数组 let name=['小红','小明','小白']; 我们在控制台输出 console.log(name); 结果: ...
- ES6中新增的数组知识
JSON数组格式转换 JSON的数组格式就是为了前端快速的把JSON转换成数组的一种格式,我们先来看一下JSON的数组格式怎么写. let json = { '0': 'xzblogs', ...
随机推荐
- linux字符编码防止乱码
一:linux字符编码 en_US.UTF-8 : 美式英文,utf-8 zh_CN.UTF-8 临时优化 export LANG=zh_CN.UTF-8 : 设置编码 永久优化 vim /etc/l ...
- JavaScripts之变量作用域提升问题(var、let、const)
变量提升(Hoisting) var: 使用var在函数或全局内任何地方声明变量相当于在其内部最顶上声明它,这种行为称为Hoisting(提升) 注意:变量赋值的位置不会改变 function fn( ...
- Git .gitignore 不起作用的解决办法
解决方法的原理:.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的. 解决方案:git rm -r --cached . ...
- js 对象的深克隆
前端笔试或者面试的时候,很喜欢问的一个问题就是对象的深度克隆,或者说是对象的深度复制.其实这个问题说容易很容易,但是要说全面也挺不易. 要弄明白对象的克隆,首先要明白js中对象的组成.在js中一切实例 ...
- MySQL事务以及存储引擎
MySQL事务以及存储引擎 目录 MySQL事务以及存储引擎 一.事务 1. 事务的概念 2. 事务的ACID特点 (1)原子性 (2)一致性 (3)隔离性 ①事务之间的相互影响 ②MySQL事务支持 ...
- 数组中包含多个对象 按照对象中的时间进行排序 适用与Angular.js、Jquery、微信小程序等
LiveList.sort(this.compare('StartDate')) //StartData:需要排序的时间 compare: function (property) { ...
- asp.core 同时兼容JWT身份验证和Cookies 身份验证两种模式
在实际使用中,可能会遇到,aspi接口验证和view页面的登录验证情况.asp.core 同样支持两种兼容. 首先在startup.cs 启用身份验证. var secrityKey = new Sy ...
- JVM基础学习(二):内存分配策略与垃圾收集技术
Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来 垃圾收集概述 Java内存模型中的堆和方法区是垃圾收集技术所需要关注的终点,因为其他的区域会跟 ...
- 详解Spring DI循环依赖实现机制
一个对象引用另一个对象递归注入属性即可实现后续的实例化,同时如果两个或者两个以上的 Bean 互相持有对⽅,最终形成闭环即所谓的循环依赖怎么实现呢属性的互相注入呢? Spring bean生命周期具体 ...
- 操作系统实验一:进程管理(含成功运行C语言源代码)
目录 操作系统实验一:进程管理 1.实验目的 2.实验内容 3.实验准备 3.1.1进程的含义 3.1.2进程的状态 3.1.3进程状态之间的转换 3.2 进程控制块PCB 3.2.1进程控制块的作用 ...