我有两个具有一些重复信息的数据结构。有没有办法使用 .map 来减少这种重复?
Posted
技术标签:
【中文标题】我有两个具有一些重复信息的数据结构。有没有办法使用 .map 来减少这种重复?【英文标题】:I have two data structures that have some duplicated information. Is there a way to reduce this duplication using .map? 【发布时间】:2019-12-14 14:45:47 【问题描述】:我的任务是创建一个将数字转换为罗马数字的函数。我可以使用两种数据结构来做到这一点,但我想用一个来完成。我知道 .map 可以提供帮助,但我对它不太熟悉。
function romanCovertion(num)
// let nums = [ 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 ];
// let romanNums = [ 'M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I' ];
// original arrays above
let romanNums = [[1000, 'M'], [900, 'CM'], [500, 'D'], [400, 'CD'], [100, 'C'], [90, 'XC'], [50, 'L'], [40, 'XL'], [10, 'X'], [9, 'IX'], [5, 'V'], [4, 'IV'], [1, 'I']]
let myMap = new Map(romanNums)
//console.log(myMap.get(1000))
let roman = '';
for (let i = 0; i < nums.length; i++)
let element = nums[i]
while (element <= num)
roman += romanNums[i];
//console.log(roman)
num -= element;
//console.log(num)
return roman;
//romanCovertion(11)
【问题讨论】:
要了解如何与Map
交互,您可以查看here。它提供了.set()
和.get()
方法。
我认为您的问题特定于罗马数字转换的实现,而不是 .map
功能本身。请相应地编辑您的问题/标题。
【参考方案1】:
使用.map
主要用于需要修改数组中的每个元素时。
在您的实现中.reduce
或.forEach
更合适,因为您的数组将用作查找表,而不是需要修改的实际数据作为结果。
function romanConvertion(num)
let romanNums = [
[1000, 'M'],
[900, 'CM'],
[500, 'D'],
[400, 'CD'],
[100, 'C'],
[90, 'XC'],
[50, 'L'],
[40, 'XL'],
[10, 'X'],
[9, 'IX'],
[5, 'V'],
[4, 'IV'],
[1, 'I']
];
var result = romanNums.reduce((x, roman) =>
while (roman[0] <= num)
num -= roman[0];
x += roman[1];
return x;
, '');
return result;
【讨论】:
【参考方案2】:您可以使用for .. of
遍历地图,如下所示:
function romanConvertion(number)
const map = new Map([[1000, 'M'], [900, 'CM'], [500, 'D'], [400, 'CD'], [100, 'C'], [90, 'XC'], [50, 'L'], [40, 'XL'], [10, 'X'], [9, 'IX'], [5, 'V'], [4, 'IV'], [1, 'I']]);
let result = '';
for (const [arabic, roman] of map)
while (arabic <= number)
number -= arabic;
result += roman;
return result;
console.log(romanConvertion(11));
console.log(romanConvertion(954));
【讨论】:
以上是关于我有两个具有一些重复信息的数据结构。有没有办法使用 .map 来减少这种重复?的主要内容,如果未能解决你的问题,请参考以下文章