apply是所有函數都有的方法.它的簽章如下:
func.apply(thisValue, [arg1, arg2, ...])
如果不考慮thisValue的影響,上面的呼叫等同於:
func(arg1, arg2, ...)
也就是說,apply允許我們將一個數組"解開"成為一個個的參數再傳遞給呼叫函數.讓我們分別看看apply使用中的三個技巧.
技巧1: 將一個數組傳遞給一個不接受數組作為參數的函數
JavaScript中沒有傳回一個陣列中最大值的函數.但是,有一個函數Math.max可以傳回任意多個數值類型的參數中的最大值.再配合apply,我們可以實現我們的目的:
> Math.max.apply(null, [10, -null, [10, - 1, 5])
10
譯者註:注意Math.max方法的參數中只要有一個值被轉為NaN,則該方法直接返回NaN
>Math.max(1,null) //相當於Math.max( 1,0)
1
>Math.max(1,undefinded) //相當於Math.max(1,NaN)
NaN
>Math.max(0,- 0) //正零比負零大,和==不同
0
>Math.max(-0,-1) //負零比-1大
-0
技巧2: 填補稀疏數組
數組中的縫隙
這裡提醒一下讀者:在JavaScript,一個數組就是一個數字到值的映射.所以如果某個索引處缺失了一個元素(一條縫隙)和某個元素的值為undefined,是兩種不同的情況.前者在被Array.prototype中的相關方法(forEach, map, 等.)遍歷時,會跳過那些缺少的元素,而後者不會:
> ["a",,"b"].forEach(function (x) { console.log(x) })
a
> ["a", undefined,"b"].forEach(function (x) { console.log(x) })
a
undefined
譯者註:這裡作者說"數組就是一個數字到值的映射",嚴格意義上是不對的,正確的說法是"數組就是一個字符串到值的映射".下面是證據:
>for (i in ["a", "b"]) {
console.log(typeof i ) //陣列的索引其實是字串
}
"string"
"string"
>["a", "b"].forEach(function (x, i) {
console.log(typeof i) //這裡的i其實不是索引,只是個數字型別的累加器
})
"number"
"number"
你可以使用in運算子來偵測陣列中是否有縫隙.
> 1 in ["a",,"b"]
false
> 1 in ["a", undefined, "b"]
true
譯者註:這裡之所以用1可以,是因為in運算子會把1轉換成"1".
你過你嘗試讀取這個縫隙的值,會返回undefined ,和實際的undefined元素是一樣.
程式碼如下:
> [">> ["> [" a",,"b"][1]
> ["a", undefined, "b"][1]
undefined
譯者註: [1]也會轉換成["1"]
填補縫隙複製程式碼
程式碼如下:
[ 'a', undefined, 'b' ]
程式碼如下:
> function returnArgs() { return [].slice.call(arguments) }
> returnArgs.apply(null, ["a","b"])
[ 'a ', undefined, 'b' ]
但需要注意的是,如果Array方法接收到的參數是一個單獨的數字,則會把這個參數當成數組長度,傳回一個新數組:
> Array.apply(null, [ 3 ])
[ , , ]
因此,最可靠的方法是寫一個這樣的函數來做這種工作:
function fillHoles(arr) {
var result = [];
for(var i=0; i result[i] = arr[i];
}
return result;
}
執行:
> fillHoles(["a",,"b"])
[ 'a', undefined, 'b' ]
Underscore中的_.compact函數會移除所有在陣列中的假值,包括縫隙:
> _.compact(["a",,"b"])
[ 'a', 'b' ]
> _.compact(["a", undefined, "b"])
[ 'a', 'b' ]
> _.compact(["a", false, "b "])
[ 'a', 'b' ]
技巧3: 扁平化陣列
任務:將一個包含多個陣列元素的陣列轉換為一階陣列.我們利用apply解包數組的能力來配合concat來做這件事:
> Array.prototype.concat.apply([], [["a"], ["b"]])
[ 'a' , 'b' ]
混合非數組類型的元素也可以:
> Array.prototype.concat.apply([], [["a"], "b"])
[ 'a', 'b' ]
apply方法的thisValue必須指定為[],因為concat是一個陣列的方法,不是一個獨立的函數.這種寫法的限制是最多只能扁平化二階數組:
> Array.prototype.concat.apply([], [[["a "]], ["b"]])
[ [ 'a' ], 'b' ]
所以你應該考慮一個替代方案.例如Underscore中的_.flatten函數就可以處理任一層數的巢狀陣列:
程式碼如下:
🎜> 🎜> 🎜> flatten([[["a"]], ["b"]])
[ 'a', 'b' ] 參考 ECMAScript.next: Array.from() and Array.of()

php求2个数组相同元素的方法:1、创建一个php示例文件;2、定义两个有相同元素的数组;3、使用“array_intersect($array1,$array2)”或“array_intersect_assoc()”方法获取两个数组相同元素即可。

C语言数组初始化的三种方式:1、在定义时直接赋值,语法“数据类型 arrayName[index] = {值};”;2、利用for循环初始化,语法“for (int i=0;i<3;i++) {arr[i] = i;}”;3、使用memset()函数初始化,语法“memset(arr, 0, sizeof(int) * 3)”。

Part1聊聊Python序列类型的本质在本博客中,我们来聊聊探讨Python的各种“序列”类,内置的三大常用数据结构——列表类(list)、元组类(tuple)和字符串类(str)的本质。不知道你发现没有,这些类都有一个很明显的共性,都可以用来保存多个数据元素,最主要的功能是:每个类都支持下标(索引)访问该序列的元素,比如使用语法Seq[i]。其实上面每个类都是使用数组这种简单的数据结构表示。但是熟悉Python的读者可能知道这3种数据结构又有一些不同:比如元组和字符串是不能修改的,列表可以

c++初始化数组的方法:1、先定义数组再给数组赋值,语法“数据类型 数组名[length];数组名[下标]=值;”;2、定义数组时初始化数组,语法“数据类型 数组名[length]=[值列表]”。

增加元素的方法:1、使用unshift()函数在数组开头插入元素;2、使用push()函数在数组末尾插入元素;3、使用concat()函数在数组末尾插入元素;4、使用splice()函数根据数组下标,在任意位置添加元素。

数据准备为了聚合查询的条件,添加了几条数据。MIN我们试着获取最小的年龄。方法实现@OverridepublicIntegergetAgeMin(){Mapresult=testFluentMybatisMapper.findOneMap(newTestFluentMybatisQuery().select.min.age("minAge").end()).orElse(null);returnresult!=null?Convert.toInt(result.get(&qu

php判断数组里面是否存在某元素的方法:1、通过“in_array”函数在数组中搜索给定的值;2、使用“array_key_exists()”函数判断某个数组中是否存在指定的key;3、使用“array_search()”在数组中查找一个键值。

元组是固定长度不可变的顺序容器(元素序列),go语言中没有元组类型,数组就相当于元组。在go语言中,数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成;数组的声明语法为“var 数组变量名 [元素数量]Type”。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Linux新版
SublimeText3 Linux最新版

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。