如何在JavaScript中将对象数组转换为映射对象?
问题描述:
如何将initialArray
类似JSON对象的数组转换为finalObject
图?如何在JavaScript中将对象数组转换为映射对象?
var initialArray = [
{ id:'id1', name:'name1' },
{ id:'id2', name:'name2' },
{ id:'id3', name:'name3' },
{ id:'id4', name:'name4' }
];
var finalObject = {
'id1':'name1',
'id2':'name2',
'id3':'name3',
'id4':'name4'
}
需要考虑的事情:
- ID是字符串。
- 我在环试了 - 不能使它的工作 - http://jsfiddle.net/5af9R/23/
任何想法?
答
您需要对数组中的对象进行操作,而不是在数组中包含索引的字符串。
您还应该使用常规for循环遍历数组。
你的jsfiddle,固定:
var x = [ {id:'1', img:'img1'}, {id:'2', img:'img2'}, {id:'3', img:'img3'} ];
var resp = {};
for(var i = 0 ; i < x.length ; i++){
var obj = x[i];
resp[obj.id] = obj.img;
}
document.write(JSON.stringify(resp, undefined, 2));
答
resp[key.id] = key.img;
您正确地称它为关键。但是你需要一个价值;
resp[x[key].id] = x[key].img;
答
您可以循环在阵列上,并为每个对象,一个新的属性添加到finalObject
其属性名称是id,其值在名称。
var finalObject = {};
for (var i = 0, max = initialArray.length; i < max; i++)
finalObject[initialArray[i].id] = initialArray[i].name;
答
var finalObject = initialArray.reduce(function(ret, obj){
ret[obj.id] = obj.name;
return ret;
}, {});
该解决方案是专门针对于特定问题的属性名称,但Array.prototype.reduce
是我用所有的时间对于任何类型的阵列的功能迭代需要一个非数组结果。
答
你没有使用正确地jsFiddle
var x = [ {id:'1', img:'img1'}, {id:'2', img:'img2'}, {id:'3', img:'img3'} ];
var resp = {};
for(var key in x){
resp['id' + x[key].id] = x[key].img;
}
document.write(JSON.stringify(resp, undefined, 2));
答
for (var i=0; i<x.length; i++) {
var id = 'id' + x[i].id;
var img = x[i].img;
resp[id] = img;
}
答
如果我理解正确的话,你可以这样做
var x =' [ {"id":"1", "img":"img1"}, {"id":"2", "img":"img2"}, {"id":"3", "img":"img3"}]';
var resp = {};
var json = $.parseJSON(x);
$(json).each(function(i,v){
resp[v.id]=v.img;
});
console.log(resp);
DEMO
你谈到了JSON,但您提供的小提琴没有JSON甚至jQuery的不作为资源添加,所以我提出了一些假设
答
今天我是同样的问题,我没有找到这里的答案除了@adam-rackis的答案。
我找到的方法是:
var initialArray = [
{ id:'id1', name:'name1' },
{ id:'id2', name:'name2' },
{ id:'id3', name:'name3' },
{ id:'id4', name:'name4' }
],
finalObject = {};
$.each(initialArray, function(k,v) {
finalObject[v.name] = v.value;
});
这些只是JavaScript对象,有一个在您输入任何JSON。 – Quentin 2012-03-02 21:04:03