我正在学习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);
答案 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])