JavaScript array.slice() 行为

标签 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)

谁能说出为什么这个 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/

相关文章:

javascript - 清除并附加 html 后单击不起作用

javascript - 未捕获的范围错误 : Maximum call stack size exceeded with innerHTML

javascript - Bootstrap Carousel 不工作并干扰其他 jquery。这是为什么?

php - 使用数组使用 foreach 填充其他变量

Underscore.js 对对象而不是数组执行操作

javascript - 使用canvas + JavaScript将云(图像)插入落雪的最简单方法

javascript - react : How to avoid multiple function call

php - 将数组保存到mysql数据库中

javascript - 带下划线的 map 缩小对象

javascript - 使用下划线列出键的所有值