我有一个数组值作为带键:值对。我想映射相同的键数组值,格式如下:
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]
对此有何帮助?
答案 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] }
答案 1 :(得分:1)
var a = {"abc": 1, "def": 2, "def": 42, "def" : 40};
这是不可能的。对象键在javascript中必须是唯一的,因此您无法使用相同的键添加3个不同的项(&#34; def&#34;)。如果您使用相同的键定义多个元素,则至少chrome将采用最后添加的值。
回答你的问题:提供的输入无法获得预期的输出。