使用javascript将数组值添加到地图中?

时间:2014-06-24 11:10:50

标签: javascript arrays

我有一个数组值作为带键:值对。我想映射相同的键数组值,格式如下:

Expected Output: [abc: 1],[def:2,42,40]

请在下面找到我的代码:

var a = {"abc": 1, "def": 2, "def": 42, "def" : 40};    
var array_keys = new Array();
var array_values = new Array();
for (var key in a) {
    array_keys.push(key);
    array_values.push(a[key]);
}
alert(array_keys);
alert(array_values);

将值返回为

My output : [abc:def] [1,40]

对此有何帮助?

2 个答案:

答案 0 :(得分:2)

如果你使用初始数据结构,你可以实现你想要的东西:

拥有一系列对象:

var a = [{abc: 1}, {def: 2}, {def: 42}, {def: 40}];

设置新对象

var o = {};

然后循环数据。对于每个对象:如果o中的键不存在,输出对象,添加它并将其值设置为数组,否则只需将对象的值推送到数组。

for (var i = 0, l = a.length; i < l; i++) {
  var key = Object.keys(a[i]);
  if (!o[key]) { o[key] = []; }
  o[key].push(a[i][key]);
}

最终得到一个对象,其值为数组:

console.log(o); // {abc: [1], def: [2,42,40] }

Demo

答案 1 :(得分:1)

var a = {"abc": 1, "def": 2, "def": 42, "def" : 40};

这是不可能的。对象键在javascript中必须是唯一的,因此您无法使用相同的键添加3个不同的项(&#34; def&#34;)。如果您使用相同的键定义多个元素,则至少chrome将采用最后添加的值。

回答你的问题:提供的输入无法获得预期的输出。