我正在做一个学习 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)
谁能说出为什么这个 expect 会返回 false?我忽略了什么
提前致谢。
编辑:已解决。 如果 n===undefined 而不是返回单值数组,则编辑为返回值:
return n === undefined ? array[array.length-1] : array.slice(-n);
最佳答案
Array.prototype.slice
返回一个数组。如果你比较一个数组和一个数字,它们就会不同。
相反,考虑使用相同的下划线 does :
if (n == null /*|| guard*/) return array[array.length - 1];
关于JavaScript array.slice() 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30332977/