我想这样做几乎这个用户希望做同样的事情:Underscore.js: create a map out of list of objects using a key found in the object在地图上添加一个对象(不使用下划线)
只有...
- 我不想使用下划线库或jQuery。只是普通的老JS。
- 我不希望我的对象键是一个字符串
所以,如果我有一个像这样的对象 -
var some_object_array = [{id: 1, val: 55}, {id: 2, val: 1}, {id: 3, val: 45}];
我想这个转换成 -
var some_map = {1: {id: 1, val: 55}, 2: {id: 2, val: 1}, 3: {id: 3, val: 45}};
另外,如果这是一个愚蠢的问题,我很抱歉。我是JS新手,在过去的两个小时里我一直在想这个问题,并一直得到错误的结果。我设法返回一个对象,看起来像这样:
{ '1': [ { id: 1, val: 55 } ],
'2': [ { id: 2, val: 1 } ],
'3': [ { id: 3, val: 45 } ] }
我的代码:
var some_object_array = [ {id: 1, val: 55},
{id: 2, val: 1},
{id: 3, val: 45}
];
function groupBy(array, callback) {
return array.reduce(function (result, item) {
var key = callback(item);
result[key] = item[key] || [];
result[key].push(item);
return result;
}, {});
}
console.log(groupBy(some_object_array, function(i) { return i.id; }));
不太正确。我的内部对象在数组中,我的密钥被转换为一个字符串。不奇怪,但我只是不知道如何修改我的代码。
哦,我想结果[关键] =项[关键],但让这么多的感觉。但是,我的对象键(1,2,3)仍然显示为一个字符串。任何想法如何解决这个问题。这让我感到困惑,因为我认为对象键总是字符串......所以......我如何“解开”一个键? – DeeK
我不确定你的意思。关键在于这种形式。如果你看JSON,一个关键总是要双引号。如果您使用整数查找,不要担心它仍然会工作..我会更新我的答案来显示此。 – Keith