我需要编写一个函数来检索传递给函数的最后一个参数。如果它只是参数,它应该返回最后一个元素。如果它是一个字符串,它应该返回最后一个字符。数组应该返回数组的最后一个元素。我的代码适用于数组,字符串和参数,只要它们不是所有字符串。
function last(list){
var arr;
if(list instanceof Array){
return list[list.length-1];
}
if(typeof list === 'string' || list instanceof String){
arr = list.split("");
return arr[arr.length-1];
}
return arguments[arguments.length-1];
}
这适用于几乎所有情况,但是当输入是一串字符串参数时我遇到了问题。
Test.assertEquals(last('a','b','c','z'), 'z');
返回'a'
为什么在测试参数是数组还是字符串时,不相交的字符串是否为true,以及如何通用访问任意参数的最后一个值?
答案 0 :(得分:1)
这样的事情应该这样做
function last(){
var a = arguments;
return (a.length > 1 ? [].slice.call(a) :
typeof a[0] === 'string' ? a[0].split('') : a[0]).pop();
}
答案 1 :(得分:0)
将您的函数调用更改为Test.assertEquals(last(['a','b','c','z']), 'z');
在您向last()
传递四个不同的参数之前,这会传递一个参数,一个包含四个字符的列表。
答案 2 :(得分:0)
更改您的上一个功能:
function last(list){
var arr;
if(list instanceof Array){
return list[list.length-1];
}
if((typeof list === 'string' || list instanceof String) && (arguments.length == 1)){
arr = list.split("");
return arr[arr.length-1];
}
return arguments[arguments.length-1];
};