错误的主要根源是,我定义的reduce方法不允许我在迭代时访问索引。我更新了我的reduce函数,然后经过一点调试就可以了:
var DIGIT_VALUES = { I: 1, V: 5, X: 10, L: 50, C: 100, D: 500, M: 1000};var each = function(collection, iterator) { if (Array.isArray(collection)) { for (var i = 0; i < collection.length; i++) { iterator(collection[i], i, collection); } } else { for (var key in collection) { iterator(collection[key], key, collection); } }};var reduce = function(collection, iterator, total) { if (total == undefined) { total = collection.shift(); } each(collection, function(val, i) { total = iterator(total, val, i); }) return total;};var translateRomanNumeral = function(roman) { if (typeof(roman) !== 'string') { return null; } if (!roman) { return 0; } // if it's not in the digit values object, return null for (var i = 0; i < roman.length; i++) { if (!(roman[i] in DIGIT_VALUES)) { return null; } } //with underscore: return reduce(roman, function(memo, letter, i) { var num = DIGIT_VALUES[letter]; //console.log(i); //how do you acess the next item in a collection in reduce? var next = DIGIT_VALUES[roman[Number(i) + 1]]; // console.log(Number(i) + 1); // console.log(next); if ( next === undefined || next <= num) { return memo + num; //console.log(memo); } else { // var diff = num - prev; // console.log(diff); return memo - num; // memo = memo + (next - num); } // return memo; }, 0);};console.log(translateRomanNumeral("LXIV")); //returns 66 ---> should return 64console.log(translateRomanNumeral("IX")) // should return 9console.log(translateRomanNumeral("IV")) /// should return 4console.log(translateRomanNumeral("CI")); //working --> returns 101console.log(translateRomanNumeral("MMMMCCL")); // working ---> returns 4250.//works!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)