CoffeeScript數(shù)組

2018-08-23 16:06 更新
數(shù)組直接量

array1 = [1, 2, 3]
在coffeescript中,數(shù)組還有一些很有意思的地方,比如我可以用下面的方式定義一個(gè)范圍數(shù)組:

range = [1..5]
而最后它會被編譯成:

var range;
range = [1, 2, 3, 4, 5];
還有更有趣的地方,我可以使用類似的語法去操作數(shù)組,比如:

firstTwo = ["one", "two", "three"][0..1]
numbers = [0..9]

numbers[3..5] = [-3, -4, -5]


數(shù)組遍歷

也許看到這里,你會想,應(yīng)該也有更簡單的方式去遍歷一個(gè)數(shù)組吧,就像我寫js那樣,使用for循環(huán)語句。是的,我們當(dāng)然有:

words = ["rattled", "roudy", "rebbles", "ranks"]
for item, i in words
    # item = words[i]
    # do something
ES5中,數(shù)組還添加了一個(gè)新的API——forEach:

array.forEach(function(item, i){
  myFunction(item)
});
在coffeescript中,你可以更優(yōu)雅:

myFunction(item) for item in array

看上去很直觀,也更加口語化,就像是你在寫文章一樣,不是嗎?



數(shù)組的其他慣常用法

當(dāng)然,對于數(shù)組而且,還有一些其他慣用的操作,類似ES5 Array的新API——map:

var result = []
for (var i=0; i < array.length; i++)
  result.push(array[i].name)

//  ES5 Array的新API——map
var result = array.map(function(item, i){
  return item.name;
});
你大可不必如此繁瑣:

result = (item.name for item in array)
如果我希望能從一個(gè)數(shù)組中,根據(jù)一定條件去篩選某一個(gè)項(xiàng),該怎么做?使用JS,你會這么做:

var result = []
for (var i=0; i < array.length; i++)
  if (array[i].name == "test")
    result.push(array[i])

//  ES5 Array的新API——filter
result = array.filter(function(item, i){
  return item.name == "test"

});


哦哦,你瞧,我們又認(rèn)識了一個(gè)ES5的API,就是filter。其實(shí)不是說這些新api不好,不過使用這些API會帶來一次額外的API調(diào)用,多少會對性能有一些不好的影響。幸運(yùn)的是,coffeescript提供類似的方式,但本質(zhì)上卻使用更快的for循環(huán)去實(shí)現(xiàn):

#   注意這邊when的用法
result = (item for item in array when item.name is "test")
數(shù)組另外一個(gè)最常用的操作,估計(jì)就是檢查是否含有某一個(gè)值了。我們可以使用indexOf方法來做,但一些低版本的IE瀏覽器尚且不支持這個(gè)函數(shù)。

var included = (array.indexOf("test") != -1)
coffeescript中我們使用in關(guān)鍵字:

included = "test" in array
這段代碼最后被翻譯成:

var included;
var __indexOf = Array.prototype.indexOf || function(item) {
  for (var i = 0, l = this.length; i < l; i++) {
    if (this[i] === item) return i;
  }
  return -1;
};
included = __indexOf.call(array, "test") >= 0;
完美兼容IE。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號