数组的常用操作方法
- Array.find() :返回通过测试函数的第一个数组元素的值
- Array.findIndex() : 返回通过测试函数的第一个数组元素的索引
- Array.includes():检查元素是否存在于数组中
var numbers = [4, 9, 16, 25, 29];
var first = numbers.find(function(value, index, array) {
return value > 18;
});// 结果:25
var sec= numbers.findIndex(function(value, index, array) {
return value > 18;
});// 结果:3
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.includes("Mango"); // 为 true
数字是否为整数
ES6 为 Number 对象添加了 2 个新方法:
Number.isInteger():数字是否为整数
Number.isSafeInteger():双精度整数
Number.isInteger(10); // 返回 true
Number.isInteger(10.5); // 返回 false
新的全局方法
ES6 还增加了 2 个新的全局数字方法:
isFinite()
isNaN():常用
箭头函数:常用 优缺点和使用注意事项
JavaScript Map对象
ECMAScript 2017 向对象添加了新的 Object.entries 方法。
- Object.get()
- Object.set()
- Object.entries() 返回 Map 对象中键/值对的数组
- Object.values() 返回 Map 对象中键的数组
- Object.keys() 返回 Map 对象中值的数组
一般在处理后端数据的时候可能会用到
const person = {
firstName : "Bill",
lastName : "Gates",
age : 19,
eyeColor : "blue"
};
Object.values(person)
//结果:‘firstName,Bill,lastName,Gates,age,19,eyeColor,blue’
Object.values(person)
//结果:‘Bill,Gates,19,blue’
JavaScript Set 对象
Set 是唯一值的集合;每个值在 Set 中只能出现一次;一个 Set 可以容纳任何数据类型的任何值。
set()的基本用法
函数
- Async 函数
- 异步迭代
ECMAScript 2018 添加了异步迭代器和可迭代对象。
通过异步迭代,我们可以在 for/of 循环中使用 await 关键字:for await () {}forEach中使用无效,(forEach中会继续往下执行,不会等待await) - JavaScript Promise.finally
let myPromise = new Promise();
myPromise.then();
myPromise.catch();
myPromise.finally();
- 新的 JavaScript RegExp 特性 (我不常用)
- JavaScript 对象 Rest 属性
ECMAScript 2018 添加了 Rest 属性。
这允许我们破坏一个对象并将剩余物收集到一个新对象上,使用原理:浅谈 JS对象的 rest/spread 属性指南
let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
x; // 1
y; // 2
z; // { a: 3, b: 4 }
数组操作函数 some()、every()、filter()、map()、set()、reduce()、sort()
-
some() 方法用于检测数组中的元素是否满足指定条件
some() 方法会依次执行数组的每个元素:
如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
如果没有满足条件的元素,则返回false。
注意: some() 不会对空数组进行检测, some() 不会改变原始数组 -
every() 方法用于检测数组所有元素是否都符合指定条件
every() 方法使用指定函数检测数组中的所有元素:
如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
如果所有元素都满足条件,则返回 true。
注意: every() 不会对空数组进行检测,every() 不会改变原始数组。
var arr = [3,6,9,12];
let status = arr.some((item) => {return item== 12})
console.log(status)
//true 因为arr数组中有12的值,所以代码块会执行
var arr = [13,15,9,12];
let status = arr.every((number){return number > 10;})
console.log(status)
//false 因为9小于10 所以返回false
-
filter()用于把数组的某些元素过滤掉,然后返回剩下的元素
filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素。
注意:得到的数组元素个数可能发生了改变,但是数组元素不会发生改变;原始数组不变。 -
map()按照原始数组元素顺序依次处理元素,返回一个新数组,数组中的元素为原始数组元素调用函数处理的后值
得到的数组元素个数不变,但是按照一定的条件转换,数组元素发生了变化;原始数组不变。
let arr = [1,2,3,4,5,6];
let narr = arr.filter((num) => {return num >= 5});
//结果:narr = [5,6]
let oldArr=[1,2];
let newArr=oldArr.map((item) => {return item*2});
console.log(newArr.valueOf());
//结果:[2,4]
- set() Set 是一种新集合类型,为这门语言带来集合数据结构
类似于数组,但是成员的值都是唯一的,没有重复的值。Set 本身是一个构造函数,用来生成 Set 数据结构,构造函数,生成 Set 数据结构。
let arr2 = new Set([1,1,2,3,4])
let arr3 = [...arr2]
console.log(arr2, arr3) // {1,2,3,4} [1,2,3,4]
// 注意:数组类型和set数组结构实例的使用,用set对数组去重,需记得要Set实例转数组,Array.from(new Set())
const s = new Set([1, 1, 2, 3, 4, 4, 5, 6, 7, 4, 2, 1]);
let m = Array.from(s); // [1, 2, 3, 4, 5, 6, 7]
// s m都是object类型,但s是Set型,m是Array,。
- reduce() 方法对数组中的每个元素执行一个由开发者自己提供的函数,将其结果汇总为单个返回值
可以理解为,reduce会遍历数组元素,将每个元素都作为参数,代入自定义函数执行并返回一个返回值。并在下一次执行时将返回值作为参数传入。
const arr = [1, 2, 3, 4]
// 求数组元素值的总和
//let total = arr.reduce((sum , item) => {
// return sum + item
//},0)
const func = (sum, item) => sum + item;
let total = arr.reduce(func);
console.log(total)
/*
参数1: 回调函数
回调函数参数
sum : 用来保存临时结果
item: 数组中每一个元素值
参数2: 初始值
设置 sum 最开始的初始值. 如果没有这个参数设置. sum 将使用数组中第一个元素作为初始值
*/