我有两个具有一些重复信息的数据结构。有没有办法使用 .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 来减少这种重复?的主要内容,如果未能解决你的问题,请参考以下文章

mongoDB有没有办法在特定时间后自己创建一个文档,比如一天?

“子类”核心数据模型

有没有办法合并两个具有相同键的 JS 对象? [复制]

如何确保两行不具有相同的值[重复]

具有相对特征重要性的机器学习模型

Pandas:过滤具有多个字符串条件的行[重复]