三、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]
【三、ES6中数组拓展】参数为空时返回空数组:
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());
// [1, 2, 3]
推荐阅读
- MySQL|MySQL 学习-进阶
- C语言实现顺序循环队列实例
- MyBatis-Plus|MyBatis-Plus 之selectMaps、selectObjs、selectCount、selectOne的使用
- Docker|Docker 删除及清理镜像的方法
- nginx|nginx 负载均衡轮询方式配置详解
- C++|PAT 乙级-1035
- C++|PAT乙级-1037
- 训练集(training)、验证集(validation)和测试集(test)
- 安卓逆向|安卓逆向之狐友sig破解
- python合集|当《鱿鱼游戏》强势来袭(“一、二、三,木头人,思密达。”你还在恐惧嘛())