如何将Map.get()与数组数组

时间:2016-12-08 11:29:44

标签: javascript arrays d3.js multidimensional-array

有没有办法将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 = ???

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您有嵌套数组,因此请使用嵌套的map s:

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);
    });
}

答案 1 :(得分:0)

不仅是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)));