【发布时间】:2019-07-01 10:15:51
【问题描述】:
我正在为一所编码学校做一些练习,其中一个是从 Underline 重新实现 _.first。我的代码没有通过最后一个测试,即“如果数组不是数组,则应返回一个空数组”,这看起来应该很容易。
但是,还有另一个测试是“应该在参数对象上工作”,如果我通过了第二个测试,我无法通过第一个测试,并且我想不出任何其他实现 atm。 这是我对这两个测试的代码:
function (array, n) {
let resultingArray = [];
let args = Array.prototype.slice.call(arguments, 0, 1);
let args2 = args[0];
if (!Array.isArray(array)) {
if (array.hasOwnProperty('length')) {
for (let key in args2) {
if (args2[key] == 'a' || args2[key] == 'b') {
resultingArray.push(args2[key]);
}
}
} else {
resultingArray = [];
}
} else if (array == undefined) {
resultingArray = [];
} else if (n == undefined || n <= 0) {
resultingArray = array.slice(0, 1);
} else {
resultingArray = array.slice(0, n);
}
return resultingArray;
};
测试给了我以下信息:
should return an empty array if array is not an array ‣
TypeError: Cannot read property 'hasOwnProperty' of undefined
at Object._.first (index.js:14:15)
at Context.<anonymous> (test/test.js:34:9)_.first().should.eql([]);
_.first(null).should.eql([]);
_.first(1).should.eql([]);
在此先感谢您的帮助!
【问题讨论】:
-
[].hasOwnProperty('length');是true -
"
if (!Array.isArray(array))" 没有意义 -
args和args2是怎么回事? AFAICS,args2 === array. -
你的功能完成了吗?因为它也缺少右大括号和 return 语句。
-
@oniramarf 不完整,我将更新以包含所有代码
标签: javascript arrays arguments