Jasmine的初学者,与Jasmine Spies的第一次尝试.我以为我在模仿这里显示的格式(搜索:"andReturn"),但我收到一个错误,我无法解决:
TypeError: Object function () {
callTracker.track({
object: this,
args: Array.prototype.slice.apply(arguments)
});
return spyStrategy.exec.apply(this, arguments);
} has no method 'andReturn'
Run Code Online (Sandbox Code Playgroud)
不知道我做错了什么.这是我的规格:
describe('Die', function() {
it('returns a value when you roll it', function() {
var die = Object.create(Die);
spyOn(Math, 'random').andReturn(1);
expect(die.roll()).toEqual(6);
});
});
Run Code Online (Sandbox Code Playgroud)
和相应的JS:
var Die =
{
roll: function() {
return Math.floor(Math.random() * 5 + 1);
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助!!!
我找到了使用该Array.prototype.filter方法从字符串中删除所有非数字的这种很酷的方法,但我不完全确定它是如何使用Number原型来实现的:
var arr = '75number9';
arr.split(/[^\d]/).filter(Number); // returns [75, 9]
Run Code Online (Sandbox Code Playgroud)
当我检查typeof Number我回来'function'.这里发生了什么?
这进一步增加了我的困惑是,如果我替换Number用String,结果都是一样的.它仍然有效!
arr.split(/[^\d]/).filter(String); // returns [75, 9]
Run Code Online (Sandbox Code Playgroud)
Array而Object作为参数,而另一方面,返回此:
["75", "", "", "", "", "", "9"]
Run Code Online (Sandbox Code Playgroud)
非常好奇明白这一点!
刚刚开始进入The Little Schemer,并有一个非常基本的Dr. Racket IDE问题:
如何清除翻译屏幕?
如何设置向上箭头以显示以前键入的项目(如在Bash中)而不是当前滚动屏幕的行为?
我的搜索空白,可能是因为我不知道这些操作的技术术语.
我只是学习如何使用JS高阶函数(map,forEach,reduce等),并且偶然发现了混乱.我正在尝试编写一个简单的"范围"函数,但似乎无法填充我的输出数组.这是目标:
range(1, 4) // [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
我明白了:
[undefined × 4]
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
function range(num1, num2) {
var rangeArr = new Array((num2 + 1) - num1);
return rangeArr.map(function(e, i, arr) {return arr[i] = num1 + i});
}
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?据我所知,这个问题似乎与我使用"新数组"的方式有关,但除此之外,我已经迷失了.
哦,这是让我困惑的部分.这很好用:
function bleck() {
var blah = [1, 2, 3, 4];
var x = 'wtf';
return blah.map(function(e, i, arr) {return arr[i] = x})
}
["wtf", "wtf", "wtf", "wtf"]
Run Code Online (Sandbox Code Playgroud)
谢谢!!
所以,我刚刚开始探索递归,并且我有点卡在一个概念上.这是我找到的一个求和函数的函数(f(126)= 1 + 2 + 6 = 9):
function sumDigits(num, sum){
if (num === 0) {
return sum;
} else {
sum += num % 10;
num = Math.floor(num / 10);
return sumDigits(num, sum);
}}
Run Code Online (Sandbox Code Playgroud)
我追溯到基地,到目前为止一切都有意义:
**Trace**
f(126, 0)
{
sum = 6
num = 12
f(12, 6)
}
f(12, 6)
{
sum = 8
num = 1
f(1, 8)
}
f(1, 8)
{
sum = 9
num = 0
f(0, 9)
}
f(0, 9) = 9
Run Code Online (Sandbox Code Playgroud)
我想对我来说没有意义的是基础情况如何在展开期间传回来?它到底是怎么旅行的?
我期待一个facepalm,但直到我明白我不认为我可以复制这个解决方案.
谢谢你的帮助!
由于某种原因,这个功能:
function returnDoubled (numArray) {
var newObj = {};
for (var i = 0; i < numArray.length; i++) {
newObj[numArray[i]] = numArray[i] * 2;
}
return(newObj);
}
console.log(returnDoubled([0, 17, 3, 1, -1, 12, 7]));
Run Code Online (Sandbox Code Playgroud)
在我的控制台中返回以下内容:
Object {0: 0, 1: 2, 3: 6, 7: 14, 12: 24, 17: 34, -1: -2}
Run Code Online (Sandbox Code Playgroud)
对我来说似乎很奇怪.为什么JavaScript选择按此顺序排列newObj对象而不是我最初传递给它的数组中指定的那个?
谢谢!
我似乎无法弄清楚这段代码有什么问题 - >不断抛出"超出最大调用堆栈大小"错误.
function arrayIntSum(array) {
if (array === []){
return 0;
}
else return array.shift() + arrayIntSum(array);
}
Run Code Online (Sandbox Code Playgroud) javascript ×6
arrays ×2
recursion ×2
ide ×1
jasmine ×1
lisp ×1
racket ×1
scheme ×1
tdd ×1
unit-testing ×1