JavaScript array.slice() 行为

JavaScript array.slice() behavior

我正在进行学习 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)

谁能说出为什么这个期望 return 是错误的?我忽略了什么

提前谢谢你。

编辑:已解决。 如果 n===undefined 而不是 returning 单值数组,则编辑为 return 值:

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

引用array.slice描述:

The slice() method returns the selected elements in an array, as a new array object.

基本上你的代码没问题,你的测试不行:

你应该改变:

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

Array.prototype.slice returns 一个数组。如果你比较一个数组和一个数字,它们就会不同。

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

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