从javascript中的任意列表中获取元素

时间:2014-10-18 05:21:51

标签: javascript arrays type-conversion

我在javascript中有一个函数,我需要检索列表的最后一个元素。列表可以是数组,字符串,数字列表(不是数组)。我尝试将列表转换为字符串,然后转换为数组并通过索引检索它,但这不起作用。

这是我尝试过的代码:

  function last(list){
      var array = new String(list);
      array = array.split("");
      return array[array.length-1];
  }

我不明白问题是什么,因为测试套件说预期:5而不是:5 我正在使用代码大战并没有编写测试。是期待一个数字并得到一个字符串' 5' ?我还不太了解松散类型语言中的类型。

1 个答案:

答案 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是一个数组方法,它从数组中删除最后一个元素并返回它。