数组

1、Array.from()

//将类数组对象和可遍历的对象转换为数组进行使用。//类数组对象
const arrLike = {'0': 'apple','1': 'banana','2': 'orange',length: 3
};
let arr = Array.from(arrLike);
console.log(arr)  // ['apple', 'banana', 'orange']//可遍历的对象
Array.from('china'); // [ "c", "h", "i", "n", "a" ]const set = new Set(['a', 'b', 'c', 'd']);
Array.from(set);// [ "a", "b", "c", "d" ]const map = new Map([[1, 2], [2, 4], [4, 8]]);
Array.from(map);  // [[1, 2], [2, 4], [4, 8]]//回调函数(二者等价)
let arr = Array.from([1, 2, 3], function (x) {return 2 * x;
});
let arr = Array.from([1, 2, 3]).map(function (x) {return 2 * x;
});
//arr: [2, 4, 6]//对回调函数中 this 的指向进行绑定
let obj = {handle: function(n){return n + 2}
}Array.from([1, 2, 3, 4, 5], function (x){return this.handle(x)//当前this指向obj
}, obj)// [3, 4, 5, 6, 7]/** 我们可以将被处理的数据和处理对象分离,将各种不同的处理数据的方法* 封装到不同的的对象中去,处理方法采用相同的名字。只要控制好注入的对象即可,方法名都一致*///数组去重
function combine(){ let arr = [].concat.apply([], arguments);  //没有去重复的新数组 return Array.from(new Set(arr));
} var m = [1, 2, 2], n = [2,3,3];
console.log(combine(m,n));  //[1,2,3]

2、Array.of()

//创建一个具有可变数量参数的新数组实例,而不考虑参数的数量或类型Array.of(7);          // [7]
Array.of(1, 2, 3);    // [1, 2, 3]
Array.of(undefined)   // [undefined]
Array.of(3).length    // 1//也可以自己定义,一个方法实现上述情况
if (!Array.of) {Array.of = function() {return Array.prototype.slice.call(arguments);};
}

3、includes ()

//用于查找一个数组中是否包含一个指定的元素let arr = ['china', 'USA', 'CHN'];
console.log(arr.includes('CHN'));//true/** 第二个参数为负数时(是从arr.length+当前第二个参数的位置进行查找,并且是升序)* 如果算出来的值小于0,则整个数组进行搜寻*/
let arr = ['china', 'USA', 'CHN'];
console.log(arr.includes('china',-1));//false (从‘CHN’开始查)//当没有参数时,includes() 方法会把第一个参数置成 undefined(不是字符串 “undefined”)
[undefined].includes();     // true
['undefined'].includes(); // false//可以判断数组里面是否为空,包含NaN
[,,,,,].includes(undefined)           // true
[null, undefined, NaN].includes(NaN)]   // true

4、find () 和 findIndex ()

//find 方法返回的是数组中符合条件的第一个值
//findIndex 方法则返回符合条件的第一个索引的位置。//一个参数
let arr = [1, 6, 3, 4, 5]
let target = arr.find(function(item) {return item % 2 === 0
})
console.log(target)   // 6let target = arr.findIndex(function(item) {return item % 2 === 0
})
console.log(target)   // 1//两个参数
const obj={handle:function(item){return item % 2 === 0}}let arr = [1, 6, 3, 4, 5]let target = arr.find(function(item) {return this.handle(item)},obj)console.log(target)   // 6

5、copyWithin()


//实现数组内元素的复制和替换,不会改变原数组的长度/** 先说明 正序(参数为正)判断条件为下标 倒序(参数为负)判断条件为位置 * 第二个参数是包含本身,第三个参数是不包含本身*///第一个参数为0或为空时,全部复制
let arr = [1, 2, 3, 4, 5];
arr.copyWithin(0);      // [1, 2, 3, 4, 5]
arr.copyWithin();       // [1, 2, 3, 4, 5]
//第一个参数不为0或者参数大于数组长度
[1, 2, 3, 4, 5].copyWithin(2);      // [1, 2, 1, 2, 3](先将数组全部复制下来,然后找下标为2(包含本身))
[1, 2, 3, 4, 5].copyWithin(6);      // [1, 2, 3, 4, 5](原数组)
//第一个参数为负数(位置)
var arr = [1, 2, 3, 4, 5];
arr.copyWithin(-2);     // [1, 2, 3, 1, 2](倒序,数2个位置为起始位(包括本身)替换)var arr = [1, 2, 3, 4, 5];
//二个参数
let arr = [1, 2, 3, 4, 5];
arr.copyWithin(0, 3); // [4,5,3,4,5]   /* 复制* 正序* 第二个参数是3,下标为3开始复制(包括本身)* 因为没有第三个参数,所以默认到结尾,即[4,5]* * 替换* 第一个参数为0,则在数组下标为0的位置开始替换(将复制的数组替换完即可)* 即[4,5,3,4,5]*/
arr.copyWithin(0,-3);// [3, 4, 5, 4, 5]/* 复制* 倒序* 第二个参数的绝对值是3,倒序数3个位置(包括本身)* 因为没有第三个参数,所以默认到结尾,即[3,4,5]* * 替换* 第一个参数为0,则在数组下标为0的位置开始替换(将复制的数组替换完即可)* 即[3,4,5,4,5]*///三个参数(第三个参数是开始复制元素的结束位置,不包括这个位置)
arr.copyWithin(1, 3, 4);     // [1, 4, 3, 4, 5] 根据规则复制4,在下标为1的位置进行替换
//如果只有第三个参数为负时,则返回原数组
arr.copyWithin(1, 3, -4);     // [1, 2, 3, 4, 5]
//后俩个参数为负数时,倒序
arr.copyWithin(0, -3, -1);  //[3,4,3,4,5] 根据规则复制[3,4]
arr.copyWithin(0, -2, -1);    // [4,,2,3,4,5] 根据规则复制[4]

6、fill()

//fill()可以替换一个指定的值,copyWithin 则是复制数组中的值去替换指定位置的值,不能指定值。//快速初始化一个数组,并填充一个值。
let arr = Array(5).fill(1)
console.log(arr)    // [1, 1, 1, 1, 1]//两个参数
[1, 2, 3].fill(0, 0);      // [0, 0, 0] 从第二个参数的指定位置(下标)进行填充
[1, 2, 3].fill(0, 1);      // [1, 0, 0] 从第二个参数的指定位置(下标)进行填充
[1, 2, 3].fill(0, -1);     // [1, 2, 0] 负数,倒序,长度1开始填充
[1, 2, 3].fill(0, -3);     // [0, 0, 0] 负数等于数组长度,全部填充//三个参数
/** 先说明 正序(参数为正)判断条件为下标 倒序(参数为负)判断条件为位置 * 第二个参数是包含本身,第三个参数是不包含本身*/let arr=['a', 'b', 'c']
arr.fill(4, 1, 2);//["a", 4, "c"]
arr.fill(4, -3, -2);//[4, "b", "c"]
arr.fill(4, -3, 1);//[4, "b", "c"]
arr.fill(4, -2, 1); //["a", "b", "c"] 后两个参数都指向b,一个包含一个不包含,故不替换//填充的内容为对象
var arr = Array(3).fill({})  // [{}, {}, {}]
//只要填充一个位置,其他位置就已经被添加了
arr[1].name = 'china';       // [{name: 'china'}, {name: 'china'}, {name: 'china'}]

7、Array.isArray()

//判断 JS 对象,如果值是 Array// 下面的函数调用都返回 true
Array.isArray([]);
Array.isArray([10]);
Array.isArray(new Array());
Array.isArray(new Array('a', 'b', 'c'))
// 鲜为人知的事实:其实 Array.prototype 也是一个数组。
Array.isArray(Array.prototype); // 下面的函数调用都返回 false
Array.isArray();
Array.isArray({});
Array.isArray(null);
Array.isArray(undefined);
Array.isArray(17);
Array.isArray('Array');
Array.isArray(true);
Array.isArray(false);
Array.isArray(new Uint8Array(32))
Array.isArray({ __proto__: Array.prototype });

8、flat()

//将一个嵌套多层的数组进行降维操作var arr = [1, 2, [3, 4, [5, 6]]];
arr.flat();      // [1, 2, 3, 4, [5, 6]]
//参数2表示降维度为2
arr.flat(2);     // [1, 2, 3, 4, 5, 6]//使用 Infinity,可展开任意深度的嵌套数组
var arr = [1, 2, [3, 4, [5, 6, [7, 8]]]];
arr.flat(Infinity);  // [1, 2, 3, 4, 5, 6, 7, 8]//去除空项
var arr = [1, 2, , 4, 5];
arr.flat();      // [1, 2, 4, 5]

欢迎访问我的个人博客

ES6学习笔记四(数组)相关推荐

  1. JS学习笔记 (四) 数组进阶

    1.基本知识 1.数组是值的有序集合.每个值叫做一个元素,而每个元素在数组中的位置称为索引,以数字表示,以0开始. 2.数组是无类型的.数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的 ...

  2. Es6学习笔记(7)----数组的扩展

    参考书<ECMAScript 6入门> http://es6.ruanyifeng.com/ 数组的扩展 1.扩展运算符:可以将数组转化成逗号隔离的单个参数 ...[1,2,3] //控制 ...

  3. ES6学习笔记(四)

    数值的扩展和对象的扩展 ES6提供了二进制和八进制数值的新的写法,粉笔用前缀0b和0o表示 ES6在Number对象上新提供了Number.isFinite() 和Number.isNaN()两个方法 ...

  4. ES6学习笔记二arrow functions 箭头函数、template string、destructuring

    接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...

  5. es6学习笔记-字符串的扩展_v1.0_byKL

    es6学习笔记-字符串的扩展_v1.0 字符的Unicode表示法 JavaScript 允许使用uxxxx的形式表示一个字符,但在 ES6 之前,单个码点仅支持u0000到uFFFF,超出该范围的必 ...

  6. ES6学习笔记(五):轻松了解ES6的内置扩展对象

    前面分享了四篇有关ES6相关的技术,如想了解更多,可以查看以下连接 <ES6学习笔记(一):轻松搞懂面向对象编程.类和对象> <ES6学习笔记(二):教你玩转类的继承和类的对象> ...

  7. ES6学习笔记04:Set与Map

    ES6学习笔记04:Set与Map JS原有两种数据结构:Array与Object,ES6新增两种数据结构:Set与Map 一.Set数据结构 Set类似于数组,但是成员值不允许重复,因此主要用于数据 ...

  8. ES6学习笔记03:变量的解构赋值

    ES6学习笔记03:变量的解构赋值 如果想从复杂数据结构(数组.对象)中获取某一个数据,可能需要大量的遍历操作才能完成.通过解构赋值,这一过程可以得到简化. 1.字符串的解构赋值 其实,Python也 ...

  9. JavaScript学习笔记(四)(DOM)

    JavaScript学习笔记(四) DOM 一.DOM概述 二.元素对象 2.1 获取方式 (1).通过ID获取一个元素对象,如果没有返回null (2).通过`标签名`获取一组元素对象,,如果没有返 ...

  10. Polyworks脚本开发学习笔记(四)-利用FILE IMPORT进行数据导入及对齐

    Polyworks脚本开发学习笔记(四)-利用FILE IMPORT进行数据导入及对齐 导入参考及数据 FILE IMPORT_REFERENCE导入参考的CAD文件如igs格式 括号内参数分别为(导 ...

最新文章

  1. 来玩Play框架05 数据库
  2. 面试官: 谈谈什么是守护线程以及作用 ?
  3. 在AIX上空闲卷上重建文件系统
  4. 吴恩达深度学习课程deeplearning.ai课程作业:Class 4 Week 2 Residual Networks
  5. 大型软件公司.net面试题!
  6. CSS基础笔记(w3school)
  7. [react] 使用Hooks要遵守哪些原则?
  8. 我对STL的一些看法(五)初识关联容器
  9. tushare写三因子模型
  10. leetcode - 101. 对称二叉树
  11. SSH远程执行命令环境变量问题
  12. 详解如何基于Arduino兼容板Digispark实现虚拟键盘与鼠标
  13. 详解阿里云第六代增强型实例,性能强劲,百万IOPS加持
  14. 用友NCCloud 补丁下载/用友ncc 补丁下载/nccloud 补丁下载
  15. 良心安利游戏音效素材网站
  16. Java Lempel-Ziv
  17. 【电商】订单信息与状态流转
  18. hp mfp m281fdw 彩色激光打印机不通电
  19. javaScript关系运算符总结
  20. HDU-1849-Rabbit and Grass

热门文章

  1. Linux内核中的PID散列表实例
  2. error: ‘SA_INTERRUPT’ undeclared (first use in this function)
  3. 《System语言详解》——5. 语言元素
  4. 易语言皮肤模块200个_S7200 SMART 模拟量模块种类amp;选型须知
  5. 3810.最长连续休息时间-AcWing题库
  6. CNN LeNet-5 AlexNet VGG简介
  7. java获取键盘输入
  8. 计算机一直在启动修复怎么关机,电脑开机总是要启动修复修复后重启还要修复怎么处理方法...
  9. mysql密码字段_如何在mysql中创建带有密码字段的表?
  10. readline函数重新定位到第一行_学习MATCH函数3种匹配方式,轻松确定数据位置和数量...