我在javascript中有一个函数,我需要检索列表的最后一个元素。列表可以是数组,字符串,数字列表(不是数组)。我尝试将列表转换为字符串,然后转换为数组并通过索引检索它,但这不起作用。
这是我尝试过的代码:
function last(list){
var array = new String(list);
array = array.split("");
return array[array.length-1];
}
我不明白问题是什么,因为测试套件说预期:5而不是:5 我正在使用代码大战并没有编写测试。是期待一个数字并得到一个字符串' 5' ?我还不太了解松散类型语言中的类型。
答案 0 :(得分:0)
来自评论,我认为你的意思是你想要返回数组中的最后一个元素,字符串中的最后一个字符,或者传递多个参数时传递的最后一个参数。这样就可以了:
function last() {
if (arguments.length > 1) { // first we handle the case of multiple arguments
return Array.prototype.pop.call(arguments);
}
value = arguments[0]
if (typeof value === 'string') { // next, let's handle strings
return value.split('').pop();
}
if (Object.prototype.toString.call( [] ) === '[object Array]') {// Arrays are of type object in js, so we need to do a weird check
return value.pop();
}
}
arguments
是一个伪数组,包含传递给函数的所有参数,因此对于last(1,2,3,4,5)
,arguments
大致为[1,2,3,4,5]
。但事实并非如此,因为arguments
按顺序包含所有参数和长度属性,但它的原型不是Array
,所以它不是{&1;}。真正的[1,2,3,4,5]
并且缺少所有数组函数。这就是为什么我们需要在pop
的上下文中调用arguments
(在javascript中,Function.prototype.call
调用函数传递第一个参数作为this的值,以及所有其余的参数进入arguments
伪数组,例如last.call([], 1, 2, 3)
将在新数组的上下文中调用last
并且arguments
大致等于[1,2,3]
)。
代码的其余部分非常简单,除了检查value
是否为数组之外,进一步解释here。
最后,pop是一个数组方法,它从数组中删除最后一个元素并返回它。