【问题标题】:How to use Map.get() with array of arrays如何将 Map.get() 与数组数组一起使用
【发布时间】:2017-04-23 15:11:13
【问题描述】:

有没有办法将 Map.get() 与数组一起使用(特别是在 d3.js 中)?

这是我所拥有的: (1) Map – 包含超过 100 个键值对的数据 (2) 数组数组 - 列出我想从 Map 中提取的数据的键以填充表(仅 100 多个值的子集)

这是我需要创建的: (1) 一个新的数组数组——这个新数组应该依次从第一个数组中取出每一项,在 Map 中查找键并返回值。

我可以让 Map.get() 在单个数组上正常工作,但前提是我指定嵌套数组的索引,如下所示:

var myMap;
var dataArray = [key_1, key_2, key_3, key_4, key_5, key_6]
var newArray = dataArray[0].map(function(d) {
              return myMap.get(d);
              });

但是当我的原始数组是数组数组时,我不知道该怎么做:

var myMap;
var dataArray = [
   [key_1, key_2, key_3],
   [key_4, key_5, key_6],
   [key_7, key_8, key_9]
   ]
var newArray = ???

有什么建议吗?

【问题讨论】:

    标签: javascript arrays d3.js multidimensional-array


    【解决方案1】:

    你有嵌套数组,所以使用嵌套的maps:

    var newArray = dataArray.map(function(array) {
                       return array.map(function(d) {
                           return myMap.get(d);
                       });
                   });
    

    如果在循环中创建函数让您感到困扰,您可以将重新创建的函数拆分出来:

    var newArray = dataArray.map(function(array) {
                       return array.map(mapOne);
                   });
    function mapOne(array) {
        return array.map(function(d) {
            return myMap.get(d);
        });
    }
    

    【讨论】:

    • 谢谢!问题解决了。我知道必须有一个优雅的解决方案,但对 JavaScript 的经验却很少。
    【解决方案2】:

    不仅是 2D,而且对于不确定的 ND 键数组,您还可以执行以下操作;

    var myMap = new Map(),
    dataArray = [["key_1", "key_2", ["key_31", "key_32", ["key_331"]]],
                 ["key_4", "key_5", ["key_61", "key_62", ["key_631"]]],
                 ["key_7", "key_8", ["key_91", "key_92", ["key_931"]]]
                ],
       getMap = (a,m) => a.map(k => Array.isArray(k) ? getMap(k,m) : m.get(k));
    console.log(JSON.stringify(getMap(dataArray,myMap)));

    【讨论】:

      猜你喜欢
      • 2013-12-19
      • 2012-01-20
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 2018-04-22
      • 2017-02-25
      相关资源
      最近更新 更多