我是新手在Javascript中使用Roman Numeral Kata。 所有规格都在流逝。我重构了spec文件,现在正在尝试重构主文件。
过去看起来像这样:
function roman(number) {
var conversion = ''
if (number == 100){
conversion += 'C'
number -= 100
}
// omitted code
while (number >= 1){
conversion += 'I'
number -= 1
}
return conversion
}
现在看起来像这样:
function roman(number) {
var denominations = {
100: 'C',
// omitted code
5: 'V',
4: 'IV',
1: 'I'
}
var conversions = ''
_.each(denominations, function(roman_num, natural_num) {
while (number >= natural_num){
conversions = conversions + roman_num
number -= natural_num
}
})
return conversions
}
我花了一些时间通过Chrome使用JS控制台进行调试,看起来不是迭代每个面额而只是陷入1。
我也在使用Jasmine,所以我的错误看起来像这样:
Expected 'IIII' to equal 'IV'
Expected 'IIIII' to equal 'V'
等等。
所以我的问题是: 1.为什么卡住只返回1的值,'我' 和 2.我该如何解决?
提前致谢!
答案 0 :(得分:0)
JavaScript对象是HashMap,字符串作为索引。因此,“_.each”中元素的顺序不保证与声明的相同。您应该使用保证订单的结构,如Array。
function roman(number) {
var denominations_natural = [100, 5, 4, 1];
var denominations_roman = ["C", "V", "IV", "I"];
var conversions = '';
for (var i=0; i<denominations_natural.length; i++) {
while (number >= denominations_natural[i]) {
conversions += denominations_roman[i];
number -= denominations_natural[i];
}
}
return conversions;
}