JavaScript array.slice()行为

时间:2015-05-19 18:05:41

标签: javascript arrays underscore.js slice

我正在学习JavaScript的练习,并且无法弄清楚为什么我的代码未通过测试评估。是的,我意识到我冗余(并且混乱)重新定义了Underscore.js _。last 。这就是练习的目的。

_.last = function(array, n) {
  if (n === 0) {
    return [];
  }
  else {
    return n === undefined ? array.slice(-1) : array.slice(-n);
  };
}'

这些是我在运行时得到的结果:

_.last([1,2,3], 2)
[2, 3]
_.last([1,2,3], 5)
[1, 2, 3]
_.last([1,2,3], 0)
[]
_.last([1,2,3])
[3]

最后一次电话 _。last([1,2,3])是未能通过评估的电话:

expect(_.last([1,2,3])).to.equal(3)

有人能说出为什么这个期望会返回假吗?我在忽视什么

提前谢谢你。

编辑:解决了。 如果n === undefined而不是返回单值数组,则编辑返回值:

return n === undefined ? array[array.length-1] : array.slice(-n);

2 个答案:

答案 0 :(得分:1)

Array.prototype.slice返回一个数组。如果你比较一个数组和一个数字,它们将是不同的。

相反,请考虑使用相同的下划线does

if (n == null /*|| guard*/) return array[array.length - 1];

答案 1 :(得分:0)

引用array.slice说明:

  

slice()方法返回数组中的选定元素,作为new   数组对象。

基本上,您的代码没问题,而您的测试不是:

你应该改变:

expect(_.last([1,2,3])).to.equal(3)

为:

expect(_.last([1,2,3])).to.equal([3])

此处有更多信息http://www.w3schools.com/jsref/jsref_slice_array.asp