length的几种写法

一个传统程序员是这么写的:

1
2
3
4
5
6
7
function length(array) {
var sum = 0
for(var i = 0; i < array.length; i++) {
sum++
}
return sum
}

一个读过SICP的程序员是这么写的:

1
2
3
4
5
6
7
function length(array) {
if(array.length === 0) {
return 0
} else {
return 1 + length(array.slice(1))
}
}

另一个读过SICP的程序员:

1
2
3
4
5
6
7
8
9
10
function length(array) {
function helper(array, num) {
if(array.length === 0) {
return num
} else {
return helper(array.slice(1), num + 1)
}
}
return helper(array, 0)
}

再函数式一点:

1
2
3
function length(array) {
return array.reduce(function(prev, cur) { return prev + 1 }, 0)
}

一个我面试过的人…

1
2
3
function length(array) {
return array.length
}