當須要傳的參數是一個數組時,使用apply更加方便;而使用call時須要將數組展開,將數組中的每一項單獨傳入。es6
當須要傳入的參數大於3個時,call的性能要略優於apply。數組
fn.call(obj,1,2,3)app
ide
let str = "asdfasFDGLASD你好,世界"函數
str = str.replace(/[a-zA-Z]/g,content => {性能
return content.toUpperCase() === content ? content.toLowerCase() :content.toUpperCase();this
})atom
function myIndexOf(T) {spa
let lenT = T.length,prototype
lenS = this.length,
res = -1;
for (let i = 0; i <= lenS - lenT) {
if (this.substring(i, lenT) == T) {
res = i;
break;
}
}
return res;
}
String.prototype.myIndexOf = myIndexOf;
let S = "asdjlkasfrqwoi",
T = "rqw";
使用正則完成效果:/rqw/.exec("asdjlkasfrqwoi")
function myIndexOf(T) {
let reg = new RegExp(T),
res = reg.exec(this);
return res === null ? -1 : res;
}
(1)首先使用es6提供的方法解決問題:
let arr = [1,2,1,5,[5,3,3,4,[8,3,6,7,[5,6]]]]
//使用es6中的Array,prototype.flat處理(將數組扁平化)
arr = arr.flat(Infinity);
//使用new set進行數組去重
arr = new Set(arr);
//使用sort進行排序
arr = Array.from(arr.sort((a,b) => a-b))
(2)將數組轉爲字符串,直接去除中括號,再轉回數組進行去重排序操做。
let arr = [1,2,1,5,[5,3,3,4,[8,3,6,7,[5,6]]]]
//轉爲字符串
arr = arr.toString()
//轉回數組
arr = arr.split(',')
//使用map函數轉爲數字
arr = arr.map(item => {
return Number(item);
});
//使用new set進行數組去重
arr = new Set(arr);
//使用sort進行排序
arr = Array.from(arr.sort((a,b) => a-b))
(3)使用some方法結合展開運算符將數組扁平化。
let arr = [1,2,1,5,[5,3,3,4,[8,3,6,7,[5,6]]]]
//使用some方法檢測arr中是否還包含有數組,爲true就使用展開運算符繼續將arr中的數組展開一層
while (arr.some(item => Array.isArray(item))){
arr = [].concat(arr)
}
//使用new set進行數組去重
arr = new Set(arr);
//使用sort進行排序
arr = Array.from(arr.sort((a,b) => a-b))
(4)使用遞歸的方法將數組扁平化。
let arr = [1,2,1,5,[5,3,3,4,[8,3,6,7,[5,6]]]]
~ function () {
function myFlat() {
let res = [],
_this = this;
let fn = (arr) => {
for(let i = 0; i < arr.length; i++){
let item = arr[i];
if (Array.isArray(item)){
fn(item);
continue;
}
res.push(item)
}
}
fn(_this);
return res
}
Array.prototype.myFlat = myFlat
}()
arr = arr.myFlat()