CoffeeScript数组
数组直接量
array1 = [1, 2, 3]
在coffeescript中,数组还有一些很有意思的地方,比如我可以用下面的方式定义一个范围数组:
range = [1..5]
而最后它会被编译成:
var range;
range = [1, 2, 3, 4, 5];
还有更有趣的地方,我可以使用类似的语法去操作数组,比如:
firstTwo = ["one", "two", "three"][0..1]
numbers = [0..9]
也许看到这里,你会想,应该也有更简单的方式去遍历一个数组吧,就像我写js那样,使用for循环语句。是的,我们当然有:
words = ["rattled", "roudy", "rebbles", "ranks"]
for item, i in words
# item = words[i]
# do something
ES5中,数组还添加了一个新的API——forEach:
array.forEach(function(item, i){
myFunction(item)
});
在coffeescript中,你可以更优雅:
myFunction(item) for item in array
数组的其他惯常用法
当然,对于数组而且,还有一些其他惯用的操作,类似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)
如果我希望能从一个数组中,根据一定条件去筛选某一个项,该怎么做?使用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"
# 注意这边when的用法
result = (item for item in array when item.name is "test")
数组另外一个最常用的操作,估计就是检查是否含有某一个值了。我们可以使用indexOf方法来做,但一些低版本的IE浏览器尚且不支持这个函数。
var included = (array.indexOf("test") != -1)
coffeescript中我们使用in关键字:
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。
array1 = [1, 2, 3]
在coffeescript中,数组还有一些很有意思的地方,比如我可以用下面的方式定义一个范围数组:
range = [1..5]
而最后它会被编译成:
var range;
range = [1, 2, 3, 4, 5];
还有更有趣的地方,我可以使用类似的语法去操作数组,比如:
firstTwo = ["one", "two", "three"][0..1]
numbers = [0..9]
numbers[3..5] = [-3, -4, -5]
也许看到这里,你会想,应该也有更简单的方式去遍历一个数组吧,就像我写js那样,使用for循环语句。是的,我们当然有:
words = ["rattled", "roudy", "rebbles", "ranks"]
for item, i in words
# item = words[i]
# do something
ES5中,数组还添加了一个新的API——forEach:
array.forEach(function(item, i){
myFunction(item)
});
在coffeescript中,你可以更优雅:
myFunction(item) for item in array
看上去很直观,也更加口语化,就像是你在写文章一样,不是吗?
数组的其他惯常用法
当然,对于数组而且,还有一些其他惯用的操作,类似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)
如果我希望能从一个数组中,根据一定条件去筛选某一个项,该怎么做?使用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"
});
# 注意这边when的用法
result = (item for item in array when item.name is "test")
数组另外一个最常用的操作,估计就是检查是否含有某一个值了。我们可以使用indexOf方法来做,但一些低版本的IE浏览器尚且不支持这个函数。
var included = (array.indexOf("test") != -1)
coffeescript中我们使用in关键字:
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。