Arguments 对象不适用于下划线第一类型函数

问题描述 投票:0回答:1

作为练习,我必须重现 Underscore.js 库中的第一个函数。

我编写的代码通过了所有测试,除了“应该在参数对象上工作”。

我通过了这些测试:

  • 应该返回一个包含数组前 n 个元素的数组
  • 如果 n 不是数字、为零或,则应返回包含第一个元素的数组 负面
  • 如果 n > 长度,则应返回整个数组
  • 如果数组不是数组,则应返回空数组

我没有通过这个测试:应该在参数对象上工作

_.first = function (array, n) {
  let arr = [];
  if (!Array.isArray(array)) {
    return [];
  } else if (isNaN(n) || n == null || n <= 0) {
    return [array[0]];
  } else {
    for (let i = 0; i < n && i < array.length; i++) {
      arr.push(array[i]);
    }
  }
  return arr;
};

我很高兴获得一些指导来理解为什么我无法通过参数对象测试。谢谢!

javascript arrays underscore.js
1个回答
0
投票

您的

first
函数的问题在于您正在测试
Array.isArray()
的基本情况。
args
对象是
array-like
而不是
array
。所以你也必须考虑到这种情况。由于
length
array
对象都存在
array-like
属性,因此您可以在基本情况下利用它。比如:

_.first = function (array, n) {
  let arr = [];
  
  // Check if the input has a length property
  if (typeof array.length !== 'number') {
    return [];
  } 
// ...rest
};
© www.soinside.com 2019 - 2024. All rights reserved.