从地图生成值对,其值为javascript中的列表

时间:2015-10-08 16:27:10

标签: javascript node.js dictionary web

我有以下地图。

map = { a: [ 11, -11 ], b: [ 'hello', 10 ] }

如何从此地图获得以下输出?

(11,'hello)
(-11,10)

请注意,地图中的键数是动态的。截至目前,有2个键。我需要让逻辑适用于每个键的任意数量的键和列表中的任意数量的元素。感谢。

2 个答案:

答案 0 :(得分:1)

对象的键遍历in an arbitrary way,考虑到这一点,并假设每个嵌套数组具有相同的长度,您可以执行以下操作:



var map = { a: [ 11, -11 ], b: [ 'hello', 10 ] }

// properties of the map to array e.g. ['a', 'b', ...]
var keys = Object.keys(map)

var ans = []
// k = the length of each nested array
// handles the case of an empty map {}
var k = (keys[0] && map[keys[0]].length)|0

for (var i = 0; i < k; i += 1) {
  var transpose = []
  for (var j = 0; j < keys.length; j += 1) {
    transpose.push(map[keys[j]][i])
  }
  ans.push(transpose)
}

document.write(JSON.stringify(ans))
&#13;
&#13;
&#13;

答案 1 :(得分:1)

循环以创建输出,显示为字符串

var keys = Object.keys(map);
var out = map[keys[0]].map(function(item, i){
    return '(' + [item, map[keys[1]][i]].join() + ')';    
}).join('<br>');

产地:

(11,hello)
(-11,10)

var map = { a: [ 11, -11 ], b: [ 'hello', 10 ] }


   
var keys = Object.keys(map);
var out = map[keys[0]].map(function(item, i){
    return '('+ [item, map[keys[1]][i]].join()   + ')';    
}).join('<br>');

document.body.innerHTML= out;