一、数组
1、splice()
定义:
通过删除或替换现有元素或者原地添加新的元素来修改原数组。由被删除的元素组成的一个数组。
语法:
array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
示例:
var myFish = ["angel", "clown", "mandarin", "sturgeon"]; var removed = myFish.splice(2, 0, "drum"); // 运算后的 myFish: ["angel", "clown", "drum", "mandarin", "sturgeon"] // 被删除的元素: [], 没有元素被删除 var myFish = ['angel', 'clown', 'drum', 'mandarin', 'sturgeon']; var removed = myFish.splice(3, 1); // 运算后的 myFish: ["angel", "clown", "drum", "sturgeon"] // 被删除的元素: ["mandarin"]
参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
2、slice()
定义:返回一个新数组,由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括end)。原始数组不会被改变。
语法:
arr.slice([begin[, end]])
示例:
var fruits = ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']; var citrus = fruits.slice(1, 3); // citrus contains ['Orange','Lemon'] function list() { return Array.prototype.slice.call(arguments); } var list1 = list(1, 2, 3); // [1, 2, 3] // 将一个类数组对象/集合转换成一个新数组。
3、indexOf()
定义:返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。
语法:
arr.indexOf(searchElement[, fromIndex])
示例:
// 数组去重 function unique(arr) { if (!Array.isArray(arr)) { console.log('type error!') return } var array = []; for (var i = 0; i < arr.length; i++) { if (array.indexOf(arr[i]) === -1) { array.push(arr[i]) } } return array; }
4、entries(),keys() 和 values()
定义:遍历数组,返回一个遍历器对象,可以用for…of循环进行遍历。keys()是对键名的遍历、values()是对键值的遍历,entries()是对键值对的遍历。
语法:
arr.entries()/keys()/values()
示例:
for (let index of ['a', 'b'].keys()) { console.log(index); } // 0 // 1 for (let elem of ['a', 'b'].values()) { console.log(elem); } // 'a' // 'b' for (let [index, elem] of ['a', 'b'].entries()) { console.log(index, elem); } // 0 "a" // 1 "b" // 使用遍历器对象上的next() let letter = ['a', 'b', 'c']; let entries = letter.entries(); console.log(entries.next().value); // [0, 'a'] console.log(entries.next().value); // [1, 'b'] console.log(entries.next().value); // [2, 'c']
5、flat()
定义:按照一个可指定的深度(默认为1)递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。
语法:
var newArray = arr.flat([depth])
示例:
var arr2 = [1, ,2, [3, 4, [5, 6]]]; arr2.flat(); // [1, 2, 3, 4, [5, 6]] var arr3 = [1, 2, [3, 4, [5, 6]]]; arr3.flat(2); // [1, 2, 3, 4, 5, 6] //使用 Infinity,可展开任意深度的嵌套数组 var arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]]; arr4.flat(Infinity); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
二、Promise
1、finally()
定义:不管 Promise 对象最后状态如何,都会执行的操作,即该操作应该是与状态无关的,不依赖于 Promise 的执行结果。
语法:
promise.finally(fn)
示例:
promise .then(result => {···}) .catch(error => {···}) .finally(() => {···});
2、Promise.all()
定义:将多个 Promise 实例,包装成一个新的 Promise 实例。当这些实例均为fulfilled时,封装后的实例是fulfilled,其余情况为rejected。
语法:传入的参数必须有必须具有 Iterator 接口,数组等。
Promise.all([Iterator]);
示例:
const p1 = new Promise((resolve, reject) => { resolve('hello'); }) .then(result => result) .catch(e => e); const p2 = new Promise((resolve, reject) => { throw new Error('报错了'); }) .then(result => result) .catch(e => e); Promise.all([p1, p2]) .then(result => console.log(result)) .catch(e => console.log(e)); // ["hello", Error: 报错了] // 如果作为参数的 Promise 实例,自己定义了catch方法, // 那么它一旦被rejected,并不会触发Promise.all()的catch方法。
3、Promise.race()
定义:将多个 Promise 实例,包装成一个新的 Promise 实例。当这些实例内有一个状态发生改变时,那个率先改变的 Promise 实例的返回值,就传递给封装后实例调用。
语法:
Promise.race([Iterator])
示例:
const p = Promise.race([ fetch('/resource-that-may-take-a-while'), new Promise(function (resolve, reject) { setTimeout(() => reject(new Error('request timeout')), 5000) }) ]); p .then(console.log) .catch(console.error); // 如果 5 秒之内fetch方法无法返回结果, // 变量p的状态就会变为rejected,从而触发catch方法指定的回调函数。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!